activity的launchMode属性可以控制其被打开时与启动其的所在的task之间的关系,它有以下几个属性.
standard
系统在启动该activity的task中创建该activity.
例:
back stack 初: A B C
C start D
back stack 后: A B C D
singleTop
如果当前task的顶部已经有该activity的一个实例,则系统将intent传入给顶部activity的onNewIntent方法,而不是创建一个新的实例.
例:
back stack 初: A B C
C start C
back stack 后: A B C (C的onNewIntent方法被调用)
例:
back stack 初: A B C
C start B
back stack 后: A B C B
singleTask
系统会创建一个新的task并且创建该activity作为该task的root.但是,如果在其他的task中已经有该activity的实例,系统将会把intent传到那个activity实例的onNewIntent方法,而不是创建一个新实例.也就是说,同一时间只能有一个该activity实例存在.
以下三个例子前提为 启动的activity所在的task和被启动的activity的 affinity不同
例:
back stack A 初: A B C
C start D
back stack A 后: A B C
back stack B 新: D
例:
back stack A 初: A B
back stack B 初: C
B start C
back stack A 后: A B
back stack B 后: C (C的onNewIntent方法会被调用)
例:
back stack A 初: A B
back stack B 初: C D
B start C
back stack A 后: A B
back stack B 后: C (D会被销毁,C的onNewIntent被调用)
singleInstance
与singleTask几乎相同,但系统不会将任何其他的activity加入到该activity所在的task中,也就是说,该activity独自存在一个task中,任何新启动的activity都会在其他的ask中启动.
Intent的flag属性可以控制被启动的activity与当前task的关系,它优先于activity的launchMode,又与launchMode有一些联系.
FLAG_ACTIVITY_NEW_TASK 等同于 singleTask
FLAG_ACTIVITY_SINGLE_TOP 等同于 singleTop
FLAG_ACTIVITY_CLEAR_TOP 如果当前task中有该activity实例,那么在该activity之上的activity全部会被销毁,该activity的onNewIntent被调用.
例:
当B的lauchMode是standard时
back stack A 初: A B C
C start B
back stack A 后: A B (C B 分别被销毁,B被重新创建)
当B的lauchMode不是standard时
back stack A 初: A B C
C start B
back stack A 后: A B (C被销毁,B的onNewIntent被调用)
转载请注明,谢谢.