Activity启动模式

问题:当我们添加activity的launchMode属性时,发生了什么?

<activity android:name=”.MainActivity”
  android:launchMode=”singleTop”>
</activity>

假设A、B、C、D、E、F是我们创建的活动界面。

launchMode=”singleTop”

添加launchMode=“singleTop”到D。

情景1:

活动栈的初始状态

D-D在活动栈的顶端

C

B

A

从服务、其它应用或者其它一些位置启动D

活动栈的最终状态

D-旧的实例,通过onNewIntent(Intent intent)获取extras data

C

B

A

情景2:

活动栈的初始状态

C

B

A

从服务、其它应用或者其它一些位置启动D

活动栈的最终状态

D -正常启动

C

B

A

情景3:

活动栈的初始状态

C

D

B

A

从C启动D

活动栈的最终状态

D -因为上一个D不在顶端,新的实例将被创建

C

D

B

A

launchMode=”singleTask”

添加launchMode=”singleTask”到 C.

情景1:

活动栈的初始状态

D

C

B

A

启动C

活动栈的最终状态

C -旧的实例,通过onNewIntent(Intent intent)获取 extras data

B

A

实际上– D 销毁了

情景2:

活动栈的初始状态

B

A

启动C

活动栈的最终状态

C -正常启动.

B

A

launchMode=”singleInstance”

添加launchMode=”singleInstance”到 E.

情景1:

活动栈的初始状态

D

C

B

A

Start E

活动栈的最终状态

E

— — — — — — — — — — — — — — — — — — — — — — —

D

C

B

A

信息 — A , B , C , D 在一个任务中,而 E 在另一个任务中.

并且,如果继续从E启动F,那么

活动栈的最终状态

F

D

C

B

A

— — — — — — — — — — — — — — — — — — — — — — —

E

信息 — A , B , C , D , F 将会在一个任务,而 E在另一个任务中.

另一种情景:

活动栈的初始状态

A

B

— — — — — — — — — — — — — — — — — — — — — — —

E

从A启动E

活动栈的最终状态

E -旧的实例, 通过onNewIntent(Intent intent)获取extras data 

— — — — — — — — — — — — — — — — — — — — — — —

A

B

launchMode=”standard”

添加launchMode=”standard”到 B.

活动栈的初始状态

D

C

B

A

启动B

活动栈的最终状态

B -新实例

D

C

B

A

原文地址:https://www.cnblogs.com/LWJin/p/11839009.html