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)
Android Activity启动模式详解
-
栈顶复用模式(
)SingleTop
- 若需要新建的 Activity 已经位于任务栈 栈顶的话 , 则该 Activity 实例不会重新创建 , 而是重用栈顶的实例
调用实例里面的 onNewIntent() 方法 , 而不会重新调用 onCreate() 和 onStart() 方法
- 否则 , 就会创建该 Activity 新的实例 并且 置于栈顶
Android Activity启动模式详解
- 若需要新建的 Activity 已经位于任务栈 栈顶的话 , 则该 Activity 实例不会重新创建 , 而是重用栈顶的实例
-
栈内复用模式(
)SingleTask
- 查看创建的 Activity 是否存在此任务栈 , 若不存在则重新创建一个任务栈 , 创建该 Activity 实例 且 置于栈中
- 若存在 则查看该 Activity 是否存在任务栈 栈内
: 则将当前 Activity 实例以上的所有 Activity 移出任务栈 , 使当前 Activity 置于栈顶 并 调用 onNewIntent() 方法存在
: 创建一个 新的 Activity 实例 并 置于栈顶不存在
-
可以通过 TaskAffinity 属性 指定 Activity 想要的任务栈
Android Activity启动模式详解
-
单例模式(
)SingleInstance
- 直接创建一个新的 任务栈 和 创建该 Activity 实例 放入新创建的栈中
- 栈内复用模式
的加强版(singleTask)
- 一旦该模式的 Activity 实例已经存在于某个栈中 , 任何应用激活该 Activity 时都会重新使用该栈中的实例 且 进入到该应用中
- 即 多个应用共享该栈中的该 Activity 实例
Android 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 四种 启动模式的 详细说明 和 使用方式