Android完美退出程序

Home / Android MrLee 2014-12-30 3003

不少新手学习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://www.it72.com/580.htm

推荐阅读
最新回复 (0)
返回