转载自:http://g.kehou.com/t1007552673.html
要完全退出一个程序,用restartPackage(),killProcess()都达不到效果,android不像iPhone,有一个home键,按一下,就退出了程序。特别是killProcess()用这个的时候,屏幕会顿一下,感觉非常不好。
我自己用到过的完全退出整个程序的方法。
1.自己写一个Activitiy的管理类,最简单的是用一个List来保持,每开启一个activity,就将其加到List里。当你想完全退出程序时,你将List里的每个Activity都finish()掉就可以了。 不过个人不太喜欢使用这种方法。
2.在你的每个Activity里,注册一个特定的Broadcast,当你想退出程序时,就send一个特定的Broadcast,这样所有还没有 finish的activity都可以接收到这个broadcast,接收到broadcast后,就finish掉Activity。这样该程序的所有 Activity就finish了,也就达到了退出程序的效果。
如果Activity很少么,建议不要这样使用,如果很多的话,推荐使用第2种方法。foresquare for android就使用过第2种方法。
----------------------------------------------------------------
如果需要保留Activity而去进入另一个Activity,那必须要很小心。因为过度推积Activity会很大程度影响机器的操作效率。
如果真有需要,我可以提供一个设计技巧,可以一次把所有Activity终止。
首先设定一个公用的class。e.g: Setting.java,定义一个静态类成员
public boolean static isCloseAll=false;
然后,在每一个Activity的onResume()加入这一个:
1. @Override
2. onResume() {
3. super.onResume();
4. if(Setting.isCloseAll) finish();
5. }
当最后一个Activity需要结束整个程序便执行:
1. Setting.isCloseAll=true;
2. finish();
---------------------------------------------------------------
转载自:http://blog.csdn.net/icewst/article/details/8349379
我在项目中的做法是:写个基类的Activity,每个Activity都继承自这个基类Activity,在这个基类Activity中写个广播,当程序退出的时候,发送关闭Activity的广播就可以了。
关于完全退出Android程序,网上这方面的帖子很多,方法也很多。记得当时自己写的第一个比较完整的项目的时候就遇上了这个问题,由于对Activity的生命周期了解不够,又使用了TabActivity使得层次关系比较复杂,在程序中添加的“退出”菜单项经常无法完全退出,之后网上各种搜索,各种方法也试过了,什么System.exit(0)啊,结束进程之类的啊,都依然无效果。
后面才发现的这个方法。思路也很简单,回想自己当初为了解决这个问题时的苦苦寻觅,遂决定将其共享,供遇到此问题人士作为参考。
啰嗦够了,上思路:添加一个全局变量作为程序退出的标记(boolean类型),当需要退出程序时置为true,程序中每个Activity的onStart方法中对该变量进行判断,为true就结束自己。
看代码吧:
使用Application来保存一个全局变量isProgramExit。(对Application使用不熟悉的话查看相关资料)
- public class MyApplication extends Application {
- // 程序退出标记
- private static boolean isProgramExit = false;
- public void setExit(boolean exit) {
- isProgramExit = exit;
- }
- public boolean isExit() {
- return isProgramExit;
- }
- }
在你退出时需要结束的每个Activity的 onStart方法加上以下代码:
- protected void onStart() {
- super.onStart();
- MyApplication mApp = (MyApplication)getApplication();
- if (mApp.isExit()) {
- finish();
- }
- }
比如,程序中有三个Activity,A —— B —— C;现在在C中有个按钮,点击退出整个程序。按照上面说的,在A和B的onStart方法中加入判断代码(C中可以不加),C中点击按钮时执行:
- MyApplication mApp = (MyApplication)getApplication();
- mApp.setExit(true);
- finish();
这样C结束了自己,按照流程会回到B,然后B中会进行判断,因为退出条件满足,结束自己;再回到A,同样也结束……
可以看到,这种方法并不高明,甚至有些复杂,因为要在每个Activity的onStart中都加上判断。但不可否认的是这种方法却是绝对有效的,不管你的程序中Activity如何跳转来跳转去,只要一声令下,通通结束,屡试不爽。
所以,有遇到程序退出问题的朋友可以作为参考。