android程序中如果有很多activity,又没有在跳转过程中全都finish,很可能在最后退出程序时,当前的activity结束了,但是又 跳转到activity栈的下一个activity。例如从A-B-C,在跳转过程中没有finish掉B,那么从C退出程序时,就会跳到B的界面。


      最理想的解决办法就是每次在调用startActivity(intent)之前finish当前的activity,但是如果在下一个activity 又要回到上一个activity,就需要new一个新的activity了。如果刚好这个activity需要加载很多图片和信息,例如一个 listactivity或者含有一个gallery,那么用户体验性就很差,每次按返回键都要重新加载。那么有没办法解决完全退出程序的方法,同时又能 保证用户体验性呢?


       网上比较流行的方法是定义栈,写一个ExitApplication类,利用单例模式管理Activity,在每个在Activity的 onCreate()方法中调用ExitApplication.getInstance().addActivity(this)方法,在退出时调用 ExitApplication.getInstance().exit()方法,就可以完全退出应用程序了。

 
 1  package  com.gaolei.study;
 2 
 3  import  java.util.LinkedList;
 4  import  java.util.List;
 5 
 6  import  android.app.Activity;
 7  import  android.app.Application;
 8 
 9  public   class  MyApplication  extends  Application {
10 
11       private   static  MyApplication instance;
12 
13       private  List < Activity >  activityList  =   new  LinkedList < Activity > ();
14 
15       public  MyApplication() {
16      }
17 
18       //  单例模式获取唯一的MyApplication实例
19       public   static  MyApplication getInstance() {
20           if  ( null   ==  instance) {
21              instance  =   new  MyApplication();
22          }
23           return  instance;
24      }
25 
26       //  添加Activity到容器中
27       public   void  addActivity(Activity activity) {
28          activityList.add(activity);
29      }
30 
31       //  遍历所有Activity并finish
32       public   void  exit() {
33           for  (Activity activity : activityList) {
34              activity.finish();
35          }
36          System.exit( 0 );
37      }
38  }
39 
       
        每个Activity类中onCreate()方法中调用 ExitApplication.getInstance().addActivity(Activity activity)方法。在某一个Activity界面退出应用程序时,只要调用 ExitApplication.getInstance().exit()方法,就可以在完全退出应用程序。
当然也可以写一个BaseActivity继承Activity, 重写onCreate()方法,然后所有activity都继承它。