Android:Activity统一堆栈管理(实现随时finish特定或是所有Activty)
转自:http://blog.csdn.net/u010635353/article/details/49681659
不了解统一堆栈管理之前的实现方法是在application中添加一个公共方法addActivity,每次Activity创建的时候调用该方法将当前Activity添加到application的Activity list中,当应用程序终止的时候,调用application定义好的exit方法,遍历Activity list,关闭所有Activity。
今天看到一篇文章,比原先的实现方法更好,原文如下:
=================================原文start
在我们App运行时,可能在某个界面需要退出App,如果你没有把之前的Activity都finish掉的话(每次跳转都把前一个Activity finish掉,虽然可以实现,但本人不建议这种写法,因为有的Activity需要反复调用,不能每一次都取create),那么当你点击返回键的时候,并不能实现直接退出,这种时候,就需要我们对Activity做一个统一的管理。
原理是,写一个BaseActivity继承自Activity,然后在Oncreate方法里,把当前的Activity加到我们Activity管理容器里,然后在需要的时候,遍历这个容器,把所有Activity都finish掉。
直接上代码:
Activity管理类:AppManager
/** * 应用程序Activity管理类:用于Activity管理和应用程序退出 * * @author BiHaidong * @version 1.0 * @created 2015-9-21 */
public class AppManager { private static Stack<Activity> activityStack = new Stack<Activity>(); /** * 添加Activity到堆栈 */ public static void addActivity(Activity activity) { activityStack.push(activity); } /** * 获取当前Activity(堆栈中最后一个压入的) */ public static Activity currentActivity() { return activityStack.lastElement(); } /** * 结束当前Activity(堆栈中最后一个压入的) */ public static void finishCurrentActivity() { Activity activity = activityStack.pop(); activity.finish(); } /** * 结束指定的Activity */ public static void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); if(!activity.isFinishing()) { activity.finish(); } } } /** * 结束指定类名的Activity */ public static void finishActivity(Class<?> cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } } /** * 结束所有Activity */ public static void finishAllActivity() { for (Activity activity : activityStack) { if (activity != null) { activity.finish(); } } activityStack.clear(); } /** * 退出应用程序 */ public static void AppExit(Context context) { try { finishAllActivity(); ActivityManager manager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); manager.killBackgroundProcesses(context.getPackageName()); System.exit(0); } catch (Exception e) { e.printStackTrace(); } }
}
BaseActivity:
public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.base_layout); AppManager.addActivity(this);
}
这样,我们只要把自己的Activity继承自BaseActivity,就可以了。然后在需要的时候调用AppManager的对应方法。
=======================================原文end
个人觉得BaseActivity 还可以重写Activity的生命周期的一些方法,已达到代码复用。另外,在公司看到其他人用过类似代码,不过在manager中,对Activity的每个操作都进行了判断,判断是否是BaseActivity的instance,个人感觉此种方法更严谨一些,不知各位觉得如何。如有疑问,欢迎指出。
Android:Activity统一堆栈管理(实现随时finish特定或是所有Activty)相关推荐
- 【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )
文章目录 一. 安卓应用任务栈管理 二. 任务与返回堆栈回顾 三. 返回堆栈清除 四. 关于亲和性回顾 五. Activity 启动模式 LaunchMode 补充 ( standard | sing ...
- Android Activity生命周期管理
http://blog.csdn.net/thl789/article/details/6628463 本文描述Android中Activity的状态,Activity的状态转换,从而总结了Activ ...
- 【Android 应用开发】Activity 返回堆栈管理 ( 栈内复用模式 singleTask | 单实例模式 singleInstance )
文章目录 一. singleTask ( 栈内复用模式 ) Activity 实例在返回堆栈中的位置 二. singleTask ( 栈内复用模式 ) Activity 启动的五种情况 三. sing ...
- Android Studio统一依赖管理Composing builds
glideVersion : "4.11.0", okhttpVersion : "3.11.0", retrofitVersion : "2.3.0 ...
- Android Studio统一依赖管理Composing builds,2021最新网易Android面经
支持Android Studio的代码补全,以下演示示例图来自于网络 使用方式可参考:Kotlin + buildSrc for Better Gradle Dependency Management ...
- android 生命周期管理,Android Activity生命周期和堆栈管理的详解_Android_脚本之家...
Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用 ...
- Android Studio使用Composing builds统一依赖管理
Composing builds 一.啥是 Composing builds ?? https://docs.gradle.org/current/userguide/composite_builds ...
- Android Activity跳转动画 - overridePendingTransition用法及原理分析
overridePendingTransition()是在Activity类中实现的一个用来实现跳转动画的方式,也是最常使用的方法. overridePendingTransition() 先看这个名 ...
- Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
本文将带你了解Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...
最新文章
- 读完ACL 2019录取的30篇知识图谱论文,我发现了这5点趋势
- 【软件】我安装Tomcat5.5(Java Web开发服务器)的几点经验
- android tab 点击,TabLayout.Tab点击事件
- 数据结构之栈的应用:表达式求值
- eclipse tomcat lomboz的安装配置说明
- python实现搜索引擎——构建爬虫系统(二)
- java常用工具下载
- 使用Servlet来连接数据库并在前端展示
- 网络空间安全 渗透 攻防5(文件共享服务器)
- 未来IT互联网企业的发展前景
- Linux系统进程优先级——计算方式
- bug-猎豹wifi提示无线网卡未打开(微星笔记本)
- PADS VX2.8 基本规则的设置方法
- android 推送历史 coolapk,酷安(com.coolapk.market) - 11.2.2 - 应用 - 酷安
- 华为ENSP网络设备配置实战2(较为复杂的ospf)
- Mysql.ACID
- 用Python画大学物理实验曲线
- C语言课程设计服装店,《C语言程序设计》课程设计实验报告-服装网店信息管理系统.doc...
- R-教材P110 条形图
- 【设计模式】UML建模之包图、组件图和部署图学习笔记
热门文章
- nacos 下线接口_《掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇》...
- orcad如何设置模块化设计_这个模块化的办公桌让您设计每一个元素,以创造完美的工作设置...
- 组件的生命周期钩子函数
- 潭州课堂25班:Ph201805201 并发(非阻塞,epoll) 第十课 (课堂笔记)
- 配置管理-CMMI的五个等级
- properties文件 , properties类, 的作用
- mongodb-java-driver基本用法
- {Azure} 常用链接
- Git:错误:error:src refspec master does not match any
- 解决mysql中表字符集gbk,列字符集Latin1,python查询乱码问题