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

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

时间: 2024-09-19 20:38:28

实现activity管理器一次退出所有activity_Android的相关文章

【Android开发】布局管理器-表格布局

在XML布局文件中定义表格布局管理器的基本语法: <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"   属性列表 >   <TableRow 属性列表> 需要添加的UI组件</TableRow>   多个TableRow </TableLayout> TableLayout支持的XML属性: android:collapseColumns设置要被

shiro和spring集成时session管理器超时时间问题

问题描述 shiro和spring集成时session管理器超时时间问题 这是我的配置文件,我配置了并发人数控制和动态权限过滤,然后session超时时间这里也是配置了的,然后并没有什么鸟用,在登录以后获取超时时间也是正常的,但还是1分钟就过期了. <?xml version="1.0" encoding="UTF-8"?> xmlns:util="http://www.springframework.org/schema/util"

用C#制作有提示窗体的日程管理器

用C#制作有提示窗体的日程管理器. 以下为主窗体代码: using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Timers;using System.Data.OleDb;namespace Calendar{ /// <summary> /// Form1 的

Win7系统巧用Windows进程管理器

  Windows进程管理器是一款功能比较强大的进程管理工具,可以进程查询.进程管理,包括结束进程.暂停进程.恢复进程.删除进程等,还可以进行端口访问查询.查看系统性能信息等. 1.进程管理 在win7系统中运行该软件,主界面将所有功能分为了进程管理.端口监听.系统信息三大部分:软件对进程的管理和允许用户对进程的操作等非常全面.对于每一个进程,用户除了可以查看其详细进程信息外,用户还可以随时结束指定进程和删除指定进程. 在对进程操作方面,该软件非常有特色:首先是"暂停进程"功能,这一功

AndroidUI设计之 布局管理器 - 详细解析布局实现

写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器都有一个LayoutParams内部类, android:... 是父容器用来控制子组件的属性. 如android:layout_gravity 是控制组件本身的对齐方式, android:gravity是控制本容器子组件的对齐方式; . 作者 :万境绝尘  转载请注明出处 : http://blo

Linux Mint 18.2 可使用 LightDM 作为默认登录管理器

Clement Lefebvre 今天发布了 2017 年 3 月版的 Linux Mint 月刊,通知基于 Ubuntu 操作系统的用户最新的即将到来的发展. 在文章中,开发人员透露到 Xreader PDF 和文档查看器正在对其用户界面进行改版,该界面将改进工具栏和侧边栏,增加对黑色主题和符号图标的支持,在工具栏中实现新按钮用于快速切换多种视图模式,并使其可在触摸屏上工作. Linux Mint 18.2 将 LightDM 替换 MDM 作为默认登录管理器 另外一个好消息是,即将到来的 L

[原创]一个简单的windows HOOK - 隐藏进程管理器中特定的进程

一个简单的windows HOOK - 隐藏进程管理器中特定的进程  (适用平台:windows 2000 sp4,windows XP sp2)           屏蔽任务管理器中的进程名称有很多种方法,可以在ring0级做文章: 修改内核进程链表,拦截内核API等.我这里只给出win32下的实现,原 理是最普通的 windows 钩子机制.实现语言 win32 汇编 (masm32):   0 在DllEntry中处理资源取得和产生"工作"线程: mov eax,_hinstan

搜狗输入法关闭扩展功能管理器

方法/步骤 首先我想说一下搜狗输入法扩展功能该如何开启.目前搜狗输入法扩展功能总共有四项. 我们先来看看总共有哪四项.我们通过开始--程序--搜狗拼音输入法--扩展功能管理.来开启. 第一个:鼠标手势 这个也是我每天必须开启的一项扩展功能.非常值推荐.不足之处.手势并不是很多.有两个窗口居左和窗口居右功能很不实用.(网上有一款鼠标手势的软件,功能很多,忘记叫什么了,还需要从新安装,所以就舍弃了.现在用搜狗的). 第二个:截屏工具. 说实话这个工具我没有用过,我一般截屏用的是QQ的截屏工具,所以这

英特尔硬件加速管理器HAXM安装使用指南

英特尔硬件加速管理器HAXM安装使用指南 Dawei Cheng 程大伟... 于 星期一, 02/04/2012 - 21:23 提交 预备知识 Intel HAXM需要预先安装Android SDK(version 17 or higher).请到安卓官方网站下载(http://developer.android.com/sdk/) . 系统要求 硬件要求: 支持VT-x, EM64T, and Execute Disable Bit 的Intel处理器 1GB及以上的内存 支持的操作系统: