我想知道,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
- 在同一任务堆栈中防止同一个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
吗?
答案 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是多余的。
但是,如果您从另一段代码启动相同的活动,这可能不是多余的。这一切都取决于你现在在活动堆栈上的内容。