Android的启动模式
- standard:标准模式
- singleTop:栈顶复用模式
- singleTask:栈内复用模式
- singleInstance:单实例模式
启动Activity时并指定启动模式有两种方式
- 一种是在清单文件中指明
- 另一种则是在Intent中添加FLAG标志位
默认是标准模式
standard启动模式
系统在启动 Activity 的任务中创建 Activity 的新实例并向其传送 Intent。Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例。
//standard模式启动A
public void standardStartA(View view) {
startActivity(new Intent(this, ActivityA.class));
}
创建Activity然后与任务关联
singleTop启动模式
- 如果当前任务的顶部已存在 Activity 的一个实例,则系统会通过调用该实例的 onNewIntent() 方法向其传送 Intent,而不是创建 Activity 的新实例.
- Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例(但前提是位于返回栈顶部的 Activity 并不是 Activity 的现有实例)。
例:
- (1) ActivityA以singleTop模式启动ActivityB,然后ActivityB再以singleTop模式启动ActivityB。
- (2) 任务栈中有两个Activity,分别是ActivityB和ActivityA;下面从ActivityB再次以singleTop模式启动ActivityB。
- (3) 任务栈中依旧是ActivityB和ActivityA,这就是singleTop模式的作用,栈顶复用,因为ActivityB启动ActivityB时,ActivityB已经位于栈顶,那么就会直接使用ActivityB,而不是直接创建。
singleTask启动模式
- 系统创建新任务并实例化位于新任务底部的 Activity。但是,如果该 Activity 的一个实例已存在于一个单独的任务中,则系统会通过调用现有实例的 onNewIntent() 方法向其传送 Intent,而不是创建新实例
- 一次只能存在 Activity 的一个实例
- 尽管 Activity 在新任务中启动,但是用户按“返回”按钮仍会返回到前一个 Activity。
singleInstance启动模式
- 与 “singleTask” 相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中,该 Activity 始终是其任务唯一仅有的成员;
- Activity 启动的任何 Activity 均在单独的任务中打开