实现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
下一篇: Android获取经纬度计算距离介绍