前一段时间在写一个Android的应用程序,结果每次都不能完全退出,每次退出都需要按好多下次返回键,很是苦恼,后来查到了原因。

android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中Activity退出,调用上面的方法,往往会销毁当前的Activity返回上一个Activity。当然也可以逐个返回上一个Activity,直到跳转到入口的Activity,最后退出应用程序。但这样比较麻烦,而且逐个返回的体验并不友好。

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

详细做法是,单独写一个类,专门用来收集和释放Activity。下面详细代码:




package net.one.ysng;


import java.util.LinkedList;

import java.util.List;


import android.app.Activity;

import android.app.Application;


public class ExitApplication extends Application {


  private List<Activity> activityList = new LinkedList<Activity>();

  private static ExitApplication instance;


  private ReadExitApplication(){

  }


  //单例模式中获取唯一的ExitApplication实例

  public static ExitApplication getInstance(){

      if(null == instance){

          instance = new ExitApplication();

      }

      return instance;

  }


  //添加Activity到容器中

  public void addActivity(Activity activity){

      activityList.add(activity);

  }


  //遍历所有Activity并finish

  public void exit(){

      for(Activity activity:activityList){

          activity.finish();

      }

      System.exit(0);

  }

}


然后在每一个Activity的onCreate方法里

调用




ExitApplication.getInstance().addActivity(this);


把当前Activity添加到容器里。

当需要退出时,再调用:




ExitApplication.getInstance().exit();  


即可轻松实现退出