退出所有Activity网上有很多很多种说法,推荐的一种方法是自定义一个Activity管理器,来管理所有已打开的Activity,要退出的时候再通过这个管理器来退出所有Activity,下面是一个简单的Activity管理器代码
关于怎么一次退出所有Activity网上有很多很多种说法,比如用杀进程的方式:android.os.Process.killProcess(android.os.Process.myPid());这种方式需要添加权限android.permission.KILL_BACKGROUND_PROCESSES; 或者用System.exit(0);退出。
另外一种方法是用ActivityManager的restartPackage()方法;但是我试过了,都没用。。。
还有人说让程序抛出一个异常退出,这种严重影响用户体验的做法我们是极力不推荐的。还有别的方法,如退出的时候发广播通知所有Activity等等。
个人比较推荐的一种方法是自定义一个Activity管理器,来管理所有已打开的Activity,要退出的时候再通过这个管理器来退出所有Activity,经验证,这种方法是可行的,而且效果很好。
下面是一个简单的Activity管理器代码,主要是建立一个栈,把每个已打开的Activity压入栈中。退出的时候在依次取出来。
public class MyActivityManager {
private static MyActivityManager instance; private Stack<Activity> activityStack;//activity栈
private MyActivityManager() { } //单例模式 public static MyActivityManager getInstance() { if (instance == null) { instance = new MyActivityManager(); } return instance; } //把一个activity压入栈中 public void pushOneActivity(Activity actvity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(actvity); Log.d("MyActivityManager ", "size = " + activityStack.size()); } //获取栈顶的activity,先进后出原则 public Activity getLastActivity() { return activityStack.lastElement(); } //移除一个activity public void popOneActivity(Activity activity) { if (activityStack != null && activityStack.size() > 0) { if (activity != null) { activity.finish(); activityStack.remove(activity); activity = null; }
} } //退出所有activity public void finishAllActivity() { if (activityStack != null) { while (activityStack.size() > 0) { Activity activity = getLastActivity(); if (activity == null) break; popOneActivity(activity); } } }}
在每一个activity中的onCreate方法里调用压入方法把当前activity压入管理栈中。比如在MainActivity中: MyActivityManager mam = MyActivityManager.getInstance(); mam.pushOneActivity(MainActivity.this);就把当前activity压入了栈中。在退出所有Activity的地方调用退出所有Activity的方法即可退出所有activ
|