Android启动模式小结
来源:互联网 发布:linux 文件用户组 编辑:程序博客网 时间:2024/06/04 00:25
一、概述
1、分类
Android的启动模式分为以下四种:
- standard
- singleTop
- singleTask
- singleInstance
其中“standard”为activity的默认启动模式。
2、使用
直接在AndroidManifest.xml中的对应的activity中添加“android:launchmode”字段即可。如下:
<activity android:name=".BActivity" android:launchMode="standard"/>
3、作用
launchMode决定了是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他的Activity实例放在同一个task任务栈里。
二、四种启动模式的定义
1、Android中的task任务栈
task任务栈是一个具有栈(决定了其先进后出的特性)结构的容器,可以用来放置多个activity的实例。当我们启动一个应用的时候,系统就会为之创建一个task,来存放根Activity。
举个例子,AActivity(根Activity),BActivity,CActivity其启动模式都为standard。此时进入应用,启动AActivity,然后在AActivity中启动BActivity,最后在BActivity中启动CActivity。整个流程精简成:A->B->C。task任务栈变化如下图:
其中栈内Activity分布使用“(ABC)”表示task任务栈中从栈底到栈顶的activity实例的排列分布。
2、启动模式—standard
这是Activity的默认启动模式。新建的activity实例直接放入task任务栈,无论该activity实例是否在栈中。
举个栗子: A,B,C,D都是standard模式。
(1)、如果Activity的操作顺序:A->B->C->D,则task任务栈内的分布为:(ABCD),如图2.1。
(2)、如果Activity的操作顺序:A->A->A,则task任务栈内的分布为:(AAA),如图2.2。注:A->A时,新的A会从onCreate执行。
3、启动模式—singleTop
如果该Activity实例已经在task任务栈栈顶了,那么就会重用这个栈顶的Activity实例(此时调用onNewIntent()方法),不会再重新去实例化Activity对象
举例: A,B,C,D都是singleTop模式。
(1)、如果Activity的操作顺序:A->B->C->D,则task任务栈内的分布为:(ABCD),如图3.1。
(2)、如果Activity的操作顺序:A->B->A->C,则task任务栈内的分布为:(ABAC),如图3.2。注:A->B->A时,此时A仍旧从onCreate开始。
(3)、如果Activity的操作顺序:A->B->A->A,则task任务栈内的分布为:(ABA),如图3.3。注:A->B->A时,此时A从onNewIntent开始,A->B->A->A时,此时A从onNewIntent开始
4、启动模式—singleTask
如果该Activity实例已经存在task任务栈中,那么就会重用该Activity的实例(此时调用onNewIntent()方法),并清除该activity实例到栈顶之间的所有activity实例。因此该activity在task容器栈中永远只有唯一实例对象,不会存在两个相同的实例对象。
举例: A,B,C,D都是singleTask模式。
(1)、如果Activity的操作顺序:A->B->C->D,则task任务栈内的分布为:(ABCD),如图4.1。
(2)、如果Activity的操作顺序:A->B->A->C,则task任务栈内的分布为:(AC),如图4.2。注:A->B->A时,此时A仍旧从onNewIntent开始。
(3)、如果Activity的操作顺序:A->B->A->A,则task任务栈内的分布为:(A)。
5、启动模式—singleInstance
这种launchMode会启用一个新的task任务栈,并保证不再有其他的Activity实例进入。一旦该模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个该Activity,不管谁激活该Activity都会进入同一个栈中。
举例: A,C,D都是standard模式,B是singleInstance模式
(1)、如果Activity的操作顺序:A->B->C->D,则task任务栈内的分布如图5.1。
A->B:因为B是singleInstance启动模式,所以此时会新建一个task任务栈来存放B的实例
A->B->C:因为C是standard模式,此时C的实例push到A所在的任务栈
A->B->C->D:因为D是standard模式,此时D的实例push到A所在的任务栈。此时,在D界面按返回键退出到C,再按返回键退出到A,再按返回键退出到B,再按返回键退出应用。
(2)、如果Activity的操作顺序:A->B->C->B,则task任务栈内的分布如图5.2。
A->B->C->B:因为B是singleInstance模式,并且B的实例已经存在,直接重用已存在的B的实例(调用onNewIntent())。此时在B界面按返回键退出到C,再按返回键退出到A,再按返回键退出应用。
6、四种启动模式的主要区别
注:singleInstance模式的Activity的实例在所有task任务栈中有且之存在一个实例。
- android启动模式小结
- Android启动模式小结
- Android中Activity启动模式小结
- Activity的启动模式(android:launchMode) 小结
- Activity的启动模式小结
- android 从sdcard启动小结
- Android程序自启动小结
- Android实现夜间模式小结
- Android 夜间模式changeskin小结
- android Activity启动模式
- Android Activity启动模式
- android 启动模式
- Android 启动模式
- android中四种启动模式
- android ics 启动模式
- android启动模式
- android启动模式
- Android启动模式分析
- 利用PHP GD库生成位图
- 【BZOJ1085】【SCOI2005】骑士精神(IDA*)
- Win10/Win8使用ADB连接不上Android设备,设备管理器出现黄色叹号解决方案
- hdu1083 Courses
- 剑指offer_二叉树---二叉树中和为某一值的路径
- Android启动模式小结
- jzoj5317 【清华集训2017模拟8.19】func (寻找性质)
- 万能的PYTHON
- Shiro权限管理(shiro框架--案例)
- 296A
- 【手把手教你全文检索】Lucene索引的【增、删、改、查】
- STM8学习笔记(一) 建立第一个工程
- 在类数组对象上复用通用的数组方法
- js-监听input值变化