2015-08-09 99 views
0

有人能解释一下FLAG_ACTIVITY_SINGLE_TOP是做什么的吗?文档说使用FLAG_ACTIVITY_SINGLE_TOP会产生什么影响?

如果设置,如果活动已在 历史堆栈的顶部运行将不会启动。

但是这句话似乎掩盖了它下面的很多含义。例如,有人在线提到最高活动可能与任务堆栈顶部的活动不一样。我不知道这意味着什么。因此,我更大的问题:使用FLAG_ACTIVITY_SINGLE_TOP会产生什么影响?

回答

0

这意味着如果活动已经启动并且再次调用它,则不会用新的活动替换它,而且您也不会创建另一个活动(这有时会发生,并且在您回弹时看到相同的活动),相反,你会拉那一个。

所以说你有3个活动:A - > B - > C。你在C中,然后通过A然后B来到它。如果你使用SINGLE_TOP过滤器从C调用A,你的栈看起来像A,C,B - 如果你开始按下后退按钮,你会去到C,然后B.我可能是错的,但多数民众赞成我相信这是。你也可以通过CLEAR过滤器来清除后面的堆栈,并且技术性地从A开始回来,并且没有后面的堆栈,你会直接回到家中。 - 如果不准确请纠正。

1

以下是我在线阅读的答案。这是不是你问的问题的完整答案,所以我真的希望别人可以添加更多的肉。

如果活动的实例已经存在于 当前任务的顶部,系统会透过一个 调用其onNewIntent()方法的意图,该实例,而不是创建一个新的实例 活动。该活动可以多次实例化,每个实例可以属于不同的任务,并且一个任务可以具有多个 实例(但是只有在后端堆栈顶部的活动不是该活动的现有实例时)。例如,假设一个任务的反向堆栈由根活动A 和顶部的活动B,C和D(堆栈是A-B-C-D; D在 顶部)组成。意图到达类型D的活动。如果D具有 默认的“标准”启动模式,则启动该类的新实例 ,堆栈变为A-B-C-D-D。但是,如果D的启动模式 为“singleTop”,则D的现有实例将通过onNewIntent()传递意图 ,因为它位于堆栈的顶部: 堆栈仍为A-B-C-D。但是,如果意图到达类型B的活动 ,则即使其启动模式为“singleTop”,B的新实例也会添加到堆栈中。

相关问题