启动 Activity 时,您可以在传送给 startActivity() 的 intent 中添加相应的标记来修改 Activity 与其任务的默认关联**。
可以使用以下标记来修改默认行为:
1. FLAG_ACTIVITY_NEW_TASK
在新任务中启动 Activity。
如果现在启动的 Activity 已经有任务在运行,则系统会将该任务转到前台并恢复其最后的状态,
而 Activity 将在 onNewIntent() 中收到新的 intent。
这与上一节中介绍的 "singleTask" launchMode 值产生的行为相同。
2. FLAG_ACTIVITY_SINGLE_TOP
如果要启动的 Activity 是当前 Activity(即位于返回堆栈顶部的 Activity),
则现有实例会收到对 onNewIntent() 的调用,而不会创建 Activity 的新实例。
这与上一节中介绍的 "singleTop" launchMode 值产生的行为相同。
3. FLAG_ACTIVITY_CLEAR_TOP
如果要启动的 Activity 已经在当前任务中运行,则不会启动该 Activity 的新实例,
而是会销毁位于它之上的所有其他 Activity,
并通过 onNewIntent() 将此 intent 传送给它的已恢复实例(现在位于堆栈顶部)。
launchMode 属性没有可产生此行为的值。
FLAG_ACTIVITY_CLEAR_TOP 最常与 FLAG_ACTIVITY_NEW_TASK 结合使用。
将这两个标记结合使用,可以查找其他任务中的现有 Activity,并将其置于能够响应 intent 的位置。
注意:如果指定 Activity 的启动模式为 "standard",系统也会将其从堆栈中移除,
并在它的位置启动一个新实例来处理传入的 intent。
这是因为当启动模式为 "standard" 时,始终会为新 intent 创建新的实例。
网友评论