退出方法:
1) 使用singleTask加载模式
2) 定义一个基类,做公共的功能
定义一个Application
退出形式:
1) 菜单->退出
2) 按back键,提示再按一次退出
3) 按back,弹出退出提示对话框
4) 按back直接退出
以下是第一种方法,通过在清单中配置activity的加载模式singleTask
使用singletask 栈中单实例 例子:a启动b,b启动c,在c的menu菜单中点击退出项,关闭所有activity。
在a的清单配置中添加加载模式为singletask,c的menu菜单的点击事件是启动a。在a中重写方法onNewIntent(),里面关闭a页面,并且结束进程。
@Override protected void onNewIntent(Intent intent) { //加载了singletask后,返回来的时候直接进入onNewIntent()方法,不会再进入onCreate(); super.onNewIntent(intent); finish(); Process.killProcess(Process.myPid());//所有activity关闭后,结束进程 }
第二种方法
在application里面创建一个全局容器arraylist<activity>,写两个方法,在容器里加addActivity()和finishActivity();
public class Myapplication extends Application { public static ArrayList<Activity> activities = new ArrayList<Activity>(); public static void addActivity(Activity activity) { activities.add(activity); } public static void finishActivity() { for (int i = 0; i < activities.size(); i++) { activities.get(i).finish(); } Process.killProcess(Process.myPid());//所有activity关闭后,结束进程 } }
创建一个基类BaseActivity,写方法getApplication(),(作用是减少代码重复)让每一个activity都继承它。
public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base); Myapplication app = (Myapplication) getApplication(); app.addActivity(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.base, menu); return true; } }
退出形式的代码如下:
1、
@Override public boolean onOptionsItemSelected(MenuItem item) { Myapplication app = (Myapplication) getApplication(); app.finishActivity();//第一种形式:点击菜单退出项,关闭所有 activity,结束进程 return super.onOptionsItemSelected(item); }
2、
int pressbacktimes = 0; private Button button; @Override public void onBackPressed() { pressbacktimes ++; if(pressbacktimes == 1) { Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show(); button.postDelayed(new Runnable() { //第二种形式:两次点击返回键,第一次弹出toast,提示再按一次退出。间隔超过5秒,就失效 @Override public void run() { pressbacktimes = 0; } }, 5000); } else if(pressbacktimes == 2) { Myapplication app = (Myapplication) getApplication(); app.finishActivity();//点击菜单退出项,关闭所有activity,结束进程 } }
3、
@Override public void onBackPressed() { //第三种形式:MainActivity里面点击返回键,弹出对话框,是否退出 new AlertDialog.Builder(this).setTitle("title").setMessage("是否退出").setNegativeButton("取消", null).setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Myapplication app = (Myapplication) getApplication(); app.finishActivity(); } }).create().show(); }