欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

实现activity管理器一次退出所有activity

程序员文章站 2022-06-29 09:37:05
关于怎么一次退出所有activity网上有很多很多种说法,比如用杀进程的方式:android.os.process.killprocess(android.os.proce...

关于怎么一次退出所有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