Intent.FLAG_ACTIVITY_CLEAR_TOP和Intent.FLAG_ACTIVITY_CLEAR_TOP之间有什么区别吗? Intent.FLAG_ACTIVITY_SINGLE_TOP

时间:2015-03-05 18:13:28

标签: android

我想知道,2代码有什么区别?

newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

FLAG_ACTIVITY_CLEAR_TOP

  

如果设置,则正在启动的活动已在运行中   当前任务,然后而不是启动它的新实例   活动,其上的所有其他活动将被关闭   这个意图将作为一个传递到(现在在顶部)旧活动   新的意图。

FLAG_ACTIVITY_SINGLE_TOP

  

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

我的理解是

  • FLAG_ACTIVITY_CLEAR_TOP - 清除顶部的所有活动,并在同一任务堆栈中阻止同一活动的多个实例。
  • FLAG_ACTIVITY_SINGLE_TOP - 在同一任务堆栈中防止同一个Activity的多个实例。

如果我的理解是正确的,那么Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP似乎是多余的吗?

我们可以写Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP吗?

2 个答案:

答案 0 :(得分:1)

FLAG_ACTIVITY_CLEAR_TOP将创建一个新活动并关闭其他活动 FLAG_ACTIVITY_SINGLE_TOP只会打开/重新打开该活动,具体取决于该活动是否已经启动 新的意图将以onNewIntent方法收到,但在第一种情况下,第一种方法将破坏其他活动。我们需要设想有一个堆栈 该堆栈由您开始活动的订单组成。想想那个场景。开始活动A ,然后启动活动B ,然后活动C
堆栈就像那样:
_活动C
_活动B
_活动A
然后,如果您开始活动A whith FLAG_ACTIVITY_CLEAR_TOP,则会关闭活动A 之上的所有活动,并且会传递意图onNewIntent

答案 1 :(得分:0)

这取决于代码其他部分的内容。 如果您调用startactivity的唯一地方是您发布的那个,那么是Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP是多余的。

但是,如果您从另一段代码启动相同的活动,这可能不是多余的。这一切都取决于你现在在活动堆栈上的内容。