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

 更新时间:2014年01月11日 15:19:10   作者:  
退出所有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

相关文章

  • Android Studio 3.6中新的视图绑定工具ViewBinding 用法详解

    Android Studio 3.6中新的视图绑定工具ViewBinding 用法详解

    这篇文章主要介绍了Android Studio 3.6中新的视图绑定工具ViewBinding 用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • android studio的使用sdk manager的方法

    android studio的使用sdk manager的方法

    这篇文章主要介绍了android studio的使用sdk manager的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • android图片处理之让图片变成圆形

    android图片处理之让图片变成圆形

    如何让图片变成圆形,这篇文章主要为大家详细介绍了android图片处理中让图片变成圆形的方法,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android实现简单画图画板

    Android实现简单画图画板

    这篇文章主要为大家详细介绍了Android实现简单画图画板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • Android使用Matrix旋转图片模拟碟片加载过程

    Android使用Matrix旋转图片模拟碟片加载过程

    这篇文章主要为大家详细介绍了Android使用Matrix旋转图片模拟碟片加载过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android自定义滑动接听电话控件组实例

    Android自定义滑动接听电话控件组实例

    这篇文章主要介绍了Android自定义滑动接听电话控件组,接听电话可以左右滑动,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • 创建Android守护进程实例(底层服务)

    创建Android守护进程实例(底层服务)

    这篇文章主要介绍了创建Android守护进程实例(底层服务),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 详解Android获取所有依赖库的几种方式

    详解Android获取所有依赖库的几种方式

    本篇文章主要介绍了详解Android获取所有依赖库的几种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Android 加载asset文件夹下边的图片

    Android 加载asset文件夹下边的图片

    这篇文章主要介绍了Android 加载asset文件夹下边的图片,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Android Listview点赞问题关于图片重复问题

    Android Listview点赞问题关于图片重复问题

    最近在开发android方面的项目时,遇到很多问题,下面小编以listview 与 baseadapter结合使用为例,给大家分享下关于点赞的的时候 图片重复问题的解决方法,一起看看吧
    2016-11-11

最新评论