为什么人们喜欢在android

时间:2015-08-10 18:11:47

标签: android android-intent android-activity

标志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一样。

1 个答案:

答案 0 :(得分:15)

CLEAR_TOP的行为有所不同,具体取决于活动是singleTop活动还是提供了标记SINGLE_TOP

我们首先假设Activity具有标准启动模式(不是singleTop)。如果您使用CLEAR_TOP标记而不使用SINGLE_TOP,Android会执行以下操作:

  • 将活动堆栈清除回(并包括)目标活动(通过完成堆栈中目标活动之上的所有活动并完成目标活动的现有实例)。 / LI>
  • 创建目标活动的新实例,并在该实例上调用onCreate()

相反,我们假设Activity仍然具有标准启动模式(不是singleTop)。如果您使用CLEAR_TOP标记 SINGLE_TOP标记,Android会执行以下操作:

  • 将活动堆栈清除回(但不包括)目标活动(通过完成堆栈中位于目标活动之上的所有活动)。
  • 在目标活动的现有实例上调用onNewIntent(),传递Intent来电中使用的startActivity()

如您所见,行为不同。

注意:如果目标活动在清单中声明为launchMode="singleTop",则使用CLEAR_TOP的行为应与您同时指定SINGLE_TOP的行为相同。但是,Android中存在一些与此相关的错误(我目前无法找到链接)。因此,您不应该依赖launchMode设置,但如果您希望重新创建目标Activity的现有实例,则始终指定SINGLE_TOP标志。