zzz~
Activity 是 Android 中重要的一部分 下面我们来了解下
Activity 的四个启动模式
- 标准模式(
Standard
) - 栈顶复用模式(
SingleTop
) - 栈内复用模式(
SingleTask
) - 单例模式(
SingleInstance
)
我们都知道 Android 是通过堆栈的方式 管理的 每加载一个新的 Activity 就会添加到 当前堆栈的顶部 , 以此类推
每次按 Back 键 或 调用 finish 方法 结束掉当前 Activity 的时候 都会把当前 Activity 从 堆栈任务 里面去掉
启动模式 详细介绍
-
标准模式(
Standard
)- 标准模式为 Activity 的默认启动模式
- 每启动一次 Activity , 就会创建一个新的 Activity 实例 和 置于栈顶
- 新的 Activity 运行在 启动它的 Activity 所在的 堆栈中
- 因为 ApplicationContext 没有任务栈 , 故无法采用标准模式启动 Activity
必须要为待启动的 Activity 指定标记 :intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
所以启动的时候就会为其创建一个新的任务栈
-
栈顶复用模式(
SingleTop
)- 若需要新建的 Activity 已经位于任务栈 栈顶的话 , 则该 Activity 实例不会重新创建 , 而是重用栈顶的实例
调用实例里面的 onNewIntent() 方法 , 而不会重新调用 onCreate() 和 onStart() 方法
- 否则 , 就会创建该 Activity 新的实例 并且 置于栈顶
- 若需要新建的 Activity 已经位于任务栈 栈顶的话 , 则该 Activity 实例不会重新创建 , 而是重用栈顶的实例
-
栈内复用模式(
SingleTask
)-
查看创建的 Activity 是否存在此任务栈 , 若不存在则重新创建一个任务栈 , 创建该 Activity 实例 且 置于栈中
-
若存在 则查看该 Activity 是否存在任务栈 栈内
存在
: 则将当前 Activity 实例以上的所有 Activity 移出任务栈 , 使当前 Activity 置于栈顶 并 调用 onNewIntent() 方法
不存在
: 创建一个 新的 Activity 实例 并 置于栈顶 -
可以通过 TaskAffinity 属性 指定 Activity 想要的任务栈
-
-
单例模式(
SingleInstance
)- 直接创建一个新的 任务栈 和 创建该 Activity 实例 放入新创建的栈中
- 栈内复用模式
(singleTask)
的加强版 - 一旦该模式的 Activity 实例已经存在于某个栈中 , 任何应用激活该 Activity 时都会重新使用该栈中的实例 且 进入到该应用中
- 即 多个应用共享该栈中的该 Activity 实例
启动模式的设置方式
启动模式有2种设置方式:在 AndroidMainifest
设置、通过 Intent
设置标识
在 AndroidMainifest 的 Activity 配置进行设置
<activity
android:launchMode="启动模式"
//属性
//standard:标准模式
//singleTop:栈顶复用模式
//singleTask:栈内复用模式
//singleInstance:单例模式
//如不设置,Activity的启动模式默认为**标准模式(standard)**
</activity>
通过Intent设置标识
Intent inten = new Intent (ActivityA.this, ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
标识属性 说明
FLAG_ACTIVITY_SINGLE_TOP : 指定启动模式为栈顶复用模式 (
SingleTop
)
FLAG_ACTIVITY_NEW_TASK : 指定启动模式为栈内复用模式 (SingleTask
)
FLAG_ACTIVITY_CLEAR_TOP : 所有位于其上层的Activity都要移除,SingleTask
模式默认具有此标记效果
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具有该标记的Activity不会出现在历史Activity的列表中,即无法通过历史列表回到该Activity上
二者设置的区别
- 优先级不同
Intent
设置方式的优先级 >Manifest
设置方式,即 以前者为准 - 限定范围不同
Manifest
设置方式无法设定FLAG_ACTIVITY_CLEAR_TOP
;Intent
设置方式 无法设置单例模式(SingleInstance
)
以上 就是本文要介绍的 Android Activity 四种 启动模式的 详细说明 和 使用方式