标志FLAG_ACTIVITY_CLEAR_TOP
找到包含活动X的任务,并清除顶部以使X进入其恢复状态。标志FLAG_ACTIVITY_SINGLE_TOP
只会将单个X实例保留在顶部。因此,如果我已经在使用SINGLE_TOP
,我就永远不需要包含CLEAR_TOP
:那是因为CLEAR_TOP
的行为包含SINGLE_TOP
的行为。那么为什么这么多样本代码包含两者呢?是因为那些开发人员不了解CLEAR_TOP
的全部功能吗?同样,我在网上看到的几乎所有例子都包括两者。为什么要冗余?
例如,如果我在任务CLEAR_TOP
上为X调用W->X->Y->Z
,那么我会获得W->X
。另一方面,如果我在任务W->X->Y->Z
上为X调用SINGLE_TOP,我最终会得到W->X->Y->Z->X
,如果我将其称为Z,我将获得W->X->Y->Z
。所以真的CLEAR_TOP
没有为等式增加任何东西:就像在其他值上加0一样。
答案 0 :(得分:15)
CLEAR_TOP
的行为有所不同,具体取决于活动是singleTop
活动还是提供了标记SINGLE_TOP
。
我们首先假设Activity具有标准启动模式(不是singleTop
)。如果您使用CLEAR_TOP
标记而不使用SINGLE_TOP
,Android会执行以下操作:
onCreate()
。相反,我们假设Activity仍然具有标准启动模式(不是singleTop
)。如果您使用CLEAR_TOP
标记和 SINGLE_TOP
标记,Android会执行以下操作:
onNewIntent()
,传递Intent
来电中使用的startActivity()
。如您所见,行为不同。
注意:如果目标活动在清单中声明为launchMode="singleTop"
,则使用CLEAR_TOP
的行为应与您同时指定SINGLE_TOP
的行为相同。但是,Android中存在一些与此相关的错误(我目前无法找到链接)。因此,您不应该依赖launchMode
设置,但如果您希望重新创建目标Activity的现有实例,则始终指定SINGLE_TOP
标志。