Android 文档提到了相同的意图标志和清单启动模式,但是当它们不同时怎么办?
因此,如果 Activity A 启动 Activity B,则 Activity B 可以在其清单中定义它如何与当前任务关联,并且 Activity A 可以使用意图标志来请求 Activity B 如何与当前任务关联。
如果两个活动都定义了活动 B 如何与任务关联,则活动 A 的请求(如意图中定义)将优先于活动 B 的请求(如其清单中定义)。
当 Activity B 可以在其清单中定义它与当前任务的关联方式不同时(单个 Top),并且 Activity A 可以使用意图标志来请求 Activity B 如何与当前任务关联不同的示例(新任务)。
什么会比谁受到尊重?
当清单启动模式和意图标志均已定义但发生冲突时,调用活动(活动 A)中的意图标志通常优先于目标活动(活动 B)的清单中定义的启动模式。
示例场景 Activity B Manifest:定义 singleTop 作为启动模式。 活动 A 意图标志:启动活动 B 时指定 FLAG_ACTIVITY_NEW_TASK。 会发生什么? 意图标志 FLAG_ACTIVITY_NEW_TASK:此标志请求应在新任务中启动 Activity B。 Manifest singleTop:这指定如果 Activity B 的实例已经位于任务返回堆栈的顶部,则应重用该实例(不应创建新实例)。 优先级和行为: 意图标志优先级:在这种情况下,FLAG_ACTIVITY_NEW_TASK 标志将优先于 Activity B 清单中定义的 singleTop 启动模式。 Activity B 将在新任务中启动,singleTop 行为将不适用。
结果:无论当前任务中是否已存在 Activity B 的实例,Activity B 都会在新任务中启动。仅当未指定 FLAG_ACTIVITY_NEW_TASK 时,singleTop 启动模式才相关。
要点: 当调用活动指定的意图标志与清单中定义的启动模式之间存在冲突时,调用活动(活动 A)指定的意图标志通常优先。