不少新手学习Android开发的时候会遇到程序没完全退出的情况,于是百度一下,有很多退出的方法。 1. Dalvik VM的本地方法 android.os.Process.killProcess(android.os.Process.myPid()); 2. 任务管理器方法 首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限android.permission.RESTART_PACKAGES,我们直接结束自己的package即可,直接使用ActivityManager类的restartPackage方法即可,参数为package name,该类通过getSystemService(Context.ACTIVITY_SERVICE)来实例化ActivityManager对象,这种方法系统提供的,但需要显示声明权限,所以使用中需要综合考虑。 3. 根据Activity的声明周期 我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口 Intent intent = new Intent(); intent.setClass(Android.this, EXIT.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置 startActivity(intent); 接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
第一种方法明显太凶猛了,把进程都杀了,如果想退出还要提交点什么数据,那是行不通的。不提倡杀进程。第二种更不用说了,不行!第三种相对人性化一点,但是如果程序出现BUG导致部分activity被回收,那么这个方法就永远退不出去了,一直在死循环。 其实还有第四种,就是有人把所有的activity放到一个vector或者list里面,这种方法也是一样的,哪里出现了异常就很可能把vector给释放了,那么,你想下,你的Vector可能是null,你怎么去释放activity? 那么现在有一个方法,写一个BaseActivity,所有的原来继承Activity都继承BaseActivity,里面放一个
private static boolean exit = false;添加退出方法
/**
* 不允许在finish中调用
*/
public void exit() {
exit(this);
}
/**
* 不允许在finish中调用
*/
public static void exit(Activity activity) {
exit = true;
activity.finish();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (exit) {
finish();
}
}
只要退出的时候调用这个exit方法就行了。最后在启动Activity(android.intent.action.MAIN)的onDestroy添加一句代码:
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(isExit())
System.exit(0);
}
把相关的变量、线程……都清空。。。
本文链接:https://it72.com/580.htm