LaunchMode处理的是: Task(实例),Activity类,Activity实例三者之间的对应关系
所谓的对应关系就是:1对1,1对多,多对1,多对多.
而TaskAffinity处理的是:启动一个应用时要选择哪个Task存放.此文只讲对应关系.
注意:一个Activity实例不会对应多个Activity类,一个Activity实例不会对应多个Task实例.唯一可以存在多对多关系的是Task实例与Activity类.
下面从对应关系的角度分别对四个LaunchMode进行解释(最新版本安卓是五个LaunchMode)
LAUNCH_MULTIPLE(standard)
ActivityA的LaunchMode是standard
对应关系 | 解释 | |
---|---|---|
Activity类 对 Activity实例 | 1对多 | 当第二次启动ActivityA时,不会重用第一次新建的ActivityA实例,而是会新建一个ActivityA的实例 |
Task实例 对 Activity实例 | 1对多 | ActivityA实例所在的Task可以有多个Activity实例 |
Task实例 对 Activity类 | 多对多 | ActivityA实例所在的Task可以有多个Activity类的实例,ActivityA类也可以在多个Task中存放不同的实例 |
LAUNCH_SINGLE_TOP (singleTop)
ActivityA的LaunchMode是singleTop
如果启动ActivityA时已经有一个ActivityA实例在当前Task的顶部了,会重用Task栈顶的ActivityA实例,并且回调这个实例的onNewIntent的方法,不会新建一个ActivityA的实例.对应关系与LAUNCH_MULTIPLE相同.
LAUNCH_SINGLE_TASK
ActivityA的LaunchMode是singleTask
对应关系 | 解释 | |
---|---|---|
Activity类 对 Activity实例 | 1对1 | ActivityA只能有一个ActivityA实例,当第二次启动ActivityA时,会重用第一次新建的ActivityA实例,并且回调这个实例的onNewIntent的方法 |
Task实例 对 Activity实例 | 1对多 | ActivityA实例所在的Task可以有多个Activity实例,但只能有一个ActivityA实例 |
Task实例 对 Activity类 | 1对多 | ActivityA实例所在的Task可以有多个Activity类的实例,但ActivityA类只能在一个Task中存放实例 |
LAUNCH_SINGLE_INSTANCE
ActivityA的LaunchMode是singleInstance
对应关系 | 解释 | |
---|---|---|
Activity类 对 Activity实例 | 1对1 | ActivityA只能有一个ActivityA实例,当第二次启动ActivityA时,会重用第一次新建的ActivityA实例,并且回调这个实例的onNewIntent的方法 |
Task实例 对 Activity实例 | 1对1 | ActivityA实例所在的Task只能有一个ActivityA实例,不能有其他Activity实例 |
Task实例 对 Activity类 | 1对1 | ActivityA实例所在的Task只能有ActivityA类的实例,ActivityA类只能在一个Task中存放实例 |