当前位置: 移动技术网 > IT编程>移动开发>Android > 实现activity管理器一次退出所有activity

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

瓷都姓名网,最后的大魔王01,nokia最新款手机

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网