Activity任务栈和启动模式
来源:互联网 发布:淘宝图片尺寸修改软件 编辑:程序博客网 时间:2024/06/05 06:37
任务栈
android的任务栈Task,是一个栈结构用来放置Activity实例的容器。和数据结构栈一样,具有先进后出的特性。
1. 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,因此一个任务栈包含了一个activity的集合, android系统可以通过Task有序地管理每个activity,并决定哪个Activity与用户进行交互:只有在任务栈栈顶的activity才可以跟用户进行交互。
2. 在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态. 可以有序的给用户列出它们的任务, 同时也不会丢失Activity的状态信息。
3. 需要注意的是,一个App中可能不止一个任务栈,某些特殊情况下,单独一个Actvity可以独享一个任务栈。还有一点就是一个Task中的Actvity可以来自不同的App,同一个App的Activity也可能不在一个Task中。
任务栈的缺点:
(1)每开启一次页面都会在任务栈中添加一个Activity,而只有任务栈中的Activity全部清除出栈时,任务栈被销毁,程序才会退出,这样就造成了用,户体验差, 需要点击多次返回才可以把程序退出了。
(2)每开启一次页面都会在任务栈中添加一个Activity还会造成数据冗余, 重复数据太多, 会导致内存溢出的问题(OOM)。
启动模式
standard-默认模式
系统的默认模式,在这样模式下,每启动一个Activity都会重新创建一个Activity的新实例,并且将其加入任务栈中,而且完全不会去考虑这个实例是否已存在。
singleTop-栈顶复用模式
栈顶复用模式,在这种模式下,如果有新的Activity已经存在任务栈的栈顶,那么此Activity就不会被重新创建新实例,而是复用已存在任务栈栈顶的Activity。这里重点是位于栈顶,才会被复用,如果新的Activity的实例已存在但没有位于栈顶,那么新的Activity仍然会被重建。
singleTask-栈内复用模式
这个模式十分复杂,有各式各样的组合。在这个模式下,如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,并且会回调该实例的onNewIntent方法。其实这个过程还存在一个任务栈的匹配,因为这个模式启动时,会在自己需要的任务栈中寻找实例,这个任务栈就是通过taskAffinity属性指定。如果这个任务栈不存在,则会创建这个任务栈。
singleInstance-全局唯一模式
该模式具备singleTask模式的所有特性外,与它的区别就是,这种模式下的Activity会单独占用一个Task栈,具有全局唯一性,即整个系统中就这么一个实例,由于栈内复用的特性,后续的请求均不会创建新的Activity实例,除非这个特殊的任务栈被销毁了。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。
应用场景:
singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很不友好的。
singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。之前打开过的页面,打开之前的页面就ok,不再新建。
singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
- Activity任务栈和Activity启动模式
- Activity任务栈和启动模式
- Activity任务栈和启动模式
- Activity启动模式和任务栈(2)
- 任务栈 和 Activity的启动模式
- activity的启动模式和任务栈
- Activity生命周期,任务栈和启动模式
- Activity任务栈和启动模式
- Activity启动模式&任务栈
- 任务栈&activity启动模式
- 任务栈、activity启动模式
- Activity启动模式和任务栈(1)
- Activity启动模式和任务栈(3)
- Activity的启动模式和任务栈(4)
- 任务栈的概念和activity的启动模式
- Android教程 -07 Activity的任务栈和启动模式
- Activity任务栈和启动模式及其使用场景
- Activity的启动模式和任务栈的概念
- 手机网站等比例缩小
- 多线程
- 资料收集(一般人我不告诉它)
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- node.js 下如何利用formData实现ajax上传图片
- Activity任务栈和启动模式
- Android EditText无法换行
- 京东mate10评论分析
- spring Security4 和 oauth2整合 注解+xml混合使用(进阶篇)
- 最简单的spring架构
- LeetCode--Intersection of Two Linked Lists (两个链表的交点)Python
- 指针与数组_数组指针
- 网站导出20171201
- 读书04《番茄工作法图解下》