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

所属分类: 软件编程 / Android 阅读数: 2010
收藏 0 赞 0 分享

关于怎么一次退出所有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媒体开发之音乐播放器

这篇文章主要为大家详细介绍了Android媒体开发之音乐播放器,播放SD卡中的音乐,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android使用Spinner实现城市级联下拉框

这篇文章主要为大家详细介绍了Android使用Spinner实现城市级联下拉框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义scrollView实现顶部图片下拉放大

这篇文章主要为大家详细介绍了Android自定义scrollView实现顶部图片下拉放大,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

android ScrollView实现下拉放大头部图片

这篇文章主要为大家详细介绍了android ScrollView实现下拉放大头部图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义View实现打钩动画功能

本篇文章通过实例给大家分享了Android自定义View实现打钩动画功能的过程和代码分享,有兴趣需要的学习下吧。
收藏 0 赞 0 分享

Android DragImageView实现下拉拖动图片放大效果

这篇文章主要为大家详细介绍了Android DragImageView实现下拉拖动图片放大效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿QQ好友详情页下拉顶部图片缩放效果

这篇文章主要为大家详细介绍了Android仿QQ好友详情页下拉顶部图片缩放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android ListView实现下拉顶部图片变大效果

这篇文章主要为大家详细介绍了Android ListView实现下拉顶部图片变大,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android编程设计模式之工厂方法模式实例详解

这篇文章主要介绍了Android编程设计模式之工厂方法模式,结合实例形式详细分析了Android工厂方法模式的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Android编程设计模式之抽象工厂模式详解

这篇文章主要介绍了Android编程设计模式之抽象工厂模式,结合实例形式详细分析了Android抽象工厂模式的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多