相信能看到这里的人,都已经是找过很多文章了,先说需求,A-->B-->C 这样打开页面,在C的时候关闭finish()可以关闭D页面,但显示B页面,需求就是 当在C页面关闭,可以把ABC几个页面都关闭了。简单来说,整个程序的退出。
我也把我看过的文章和做过的经验总结一下吧:
1: Android2.1以下的程序,可以用以下方法完全退出
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE); am.restartPackage(getPackageName());
但需要在AndroidManifest.xml声明权限
2:
Android2.2API restartPackage的描述 写道
This method is deprecated.
This is now just a wrapper for killBackgroundProcesses(String); the previous behavior here is no longer available to applications because it allows them to break other applications by removing their alarms, stopping their services, etc.
This is now just a wrapper for killBackgroundProcesses(String); the previous behavior here is no longer available to applications because it allows them to break other applications by removing their alarms, stopping their services, etc.
在2.2里面推出新的方法 killBackgroundProcesses(String packageName). 此函数的API Level最小为8,方法如下
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE); am.killBackgroundProcesses(getPackageName());
需要在AndroidManifest.xml里声明权限
3:但不知道为什么,我在2.2中 killBackgroundProcesses的方法也是无效的。经过许多文章的阅读,找到了以下的方法
A页面代码如下:
Intent intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//关键! intent.setClass(A.this, B.class); startActivity(intent);
B页面代码如下:
Intent intent = new Intent(); intent.setClass(B.this, C.class); startActivity(intent);
C页面代码如下:
Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME);//必须,没有这个你可以看看效果~ startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//可无 startActivity(startMain); System.exit(0);//关键,如果换成 finish()效果表面一样,但实际并无关进程
关键是,A页面(起始页面) C页面(关闭页面) 的设置
其实关于A页面的设置 很多文章都有说,但在C页面这里,却很少了。
通过已上三步,基本能关掉所有进程,因为在任务管理器没有了,如果最后的System.exit(0)换成finish()任务管理器里面仍显示该项目正在运行。
但这里还有一个bug的,就是关闭之后,再次启动程序,会去到B页面。。。 哈哈,这里的解决方法就很多了,根据大家的业务需求去做吧。
在Android做应用层,如果你想做好,想把体验做得更贴切,其实也是很复杂的事情。
希望大家看到这个文章能觉得有用,谢谢已阅者!