如何指定 Activity 的启动模式?
在 AndroidMainfest.xml 中通过给 <activity> 标签指定 android:lauchMode
来选择启动模式。
4种启动模式
- standard(默认):每当启动一个 Activity,都会创建一个新的实例压入返回栈。
- singleTop:在启动 Activity 时如果发现返回栈的栈顶已经是该 Activity,就不会创建新的实例;如果不是,还是会创建一个新的实例压入返回栈。
- singleTask:每当启动一个 Activity,都会先在返回栈中检查是否存在该 Activity 的实例,如果有,则将该实例之上的其他 Activity 全部出栈,让该 Activity 位于栈顶;如果没有,还是会创建一个新的实例压入返回栈。
- singleInstance:
- 当
singleInstance
模式的 Activity 被启动时,系统会为它创建一个新的、独立的任务栈,且这个任务栈中只能包含这一个 Activity。其他 Activity 无法进入该任务栈。 - 整个系统中只会存在该 Activity 的一个实例。无论从哪个任务栈启动它,系统都会直接复用已存在的实例,并将该实例所在的任务栈切换到前台。
- 当从
singleInstance
Activity 启动其他 Activity 时,新 Activity 会进入新的任务栈(或原启动者所在的任务栈),而singleInstance
Activity 仍独自留在自己的任务栈中。假设存在三个 Activity:A(默认 standard 模式)、B(singleInstance 模式)、C(默认 standard 模式),启动流程如下:1. 启动 A:系统创建任务栈 Task1,A 入栈 → A 来到前台 Task1: [A] 2. 从 A 启动 B:系统创建新任务栈 Task2,B 入栈(独占)→ B 来到前台 Task2: [B] 3. 从 B 启动 C:系统将 C 放入 Task1(原启动者 A 所在栈)→ C 来到前台 Task1: [A, C] 4. 此时按返回键:C 出栈 → A 来到前台 Task1: [A] → 再按返回键:A 出栈 → Task1 销毁 → B 来到前台 → 再按返回键:B 出栈 → Task2 销毁整个过程中,B 始终独自在 Task2 中,且无论启动多少次 B,都不会创建新实例,只会将 Task2 切换到前台。
- 当