Android如何优雅的销毁多个activity
来源:互联网 发布:淘宝店铺设置在哪里 编辑:程序博客网 时间:2024/05/16 17:58
在开发过程中,我们可能会遇到一种需求,那就是在跳转到新的activity的同时销毁之前打开的任意个activity。
比如,注册功能。一般来说,注册需要分为多个步骤,1、填写手机号,输入验证码;2、填写基本资料;3、设置头像或密码等。
如果这三个步骤每一个都使用一个activity,那么在注册流程结束时,我们需要销毁这三个activity,不然的话,当我们返回时,看到的还是注册界面,显然不对。
如果销毁一个activity,显然很简单,只需要启动新activity的时候调用finish()就ok了,那销毁多个activity又该怎么办呢?
网上有人给出的方案是使用一个ArrayList<Activity>来管理Activity的引用,需要销毁时只需要遍历这个集合然后对每一个元素调用finish()即可。这样虽然可以实现,但是存在内存泄漏的风险,因为如果集合中引用Activity的元素不清空的话,Activity对象就没办法被垃圾回收器回收,造成内存泄露。
网上还有一种方案就是往需要销毁的activity发送广播,activity收到广播之后就自行销毁,这种实现方式效率不高,个人感觉也不优雅。
今天,我来介绍两种方式来实现这种需求:
1、使用Intent的FLAG_ACTIVITY_CLEAR_TASK标记,这个标记可以清空要启动的activity所在的task栈。什么意思呢?假如现在任务栈里面有A、B、C三个activity,这时C启动D,如果加上这个标记,那么启动D的同时就会移除A、B、C,这样这个任务栈里面就只剩新启动的D了。注意:这个标记需要与FLAG_ACTIVITY_NEW_TASK这个配合使用,否则不起作用。
2、使用Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK标记,这个标记可以清空要启动的activity上面的所有activity(与新启动的activity同处于一个task栈)。什么意思呢?假如现在任务栈里面有A、B、 C、 D四个activity,这时D启动A,带上这两个标记,因为A已经在这个task栈中了,这个时候不会启动新的task栈,同时系统发现A的上面有B、C、D,所以系统会将这三个activity从task栈中移除,最终,这个task只剩下A了。
- Android如何优雅的销毁多个activity
- 如何销毁Activity,和如何一次销毁多个activity
- android退出程序销毁多个Activity方法
- Android Activity的滑动销毁
- 最简单的方式添加和销毁多个activity
- 使用广播销毁多个Activity
- 野人学Android第二弹——多Activity之间的生命周期的规律摸索及多个Activity同时销毁的实现
- Android Activity的销毁和重建
- Android学习之销毁所有的Activity
- android退出应用销毁所有的activity
- 巧用Android启动模式之singleTask,一步销毁多个Activity
- Android 如何安全的退出多个Activity
- Android如何实现多个Activity的界面皮肤更换
- android 如何管理打开的多个Activity AppManager
- Android如何使用已调用多个Activity的Application
- Android-销毁activity
- Android之Activity销毁
- android 面试4: 如何退出Activity?如何安全退出已调用多个Activity的Application?
- GTK+ 图形界面编程--个人总结
- 自定义View学习笔记之自定义圆
- 数据结构实验之链表五:单链表的拆分
- 一次优化web项目的经历记录(二)
- UIView的layoutSubviews和drawRect方法何时调用
- Android如何优雅的销毁多个activity
- booloader编写
- Apache POI(2):单元格(cell)
- AFNetworking框架的几个细节
- 模拟队列
- This is my path of Java!
- 百度商桥是否需要升级
- 分布式搜索elasticsearch java API 之(二)------put Mapping定
- equals和==