FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK行为很奇怪

时间:2015-12-01 15:02:39

标签: android back-stack android-task

我一直在测试意图标志,但我需要澄清一些事情。我的导航抽屉里有两个项目,点击后我就这样做了,

Intent intent = new Intent(this, activityClazz);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

哪些类是具有相同导航抽屉的活动。 -No片段由于各种原因而被使用。在那些活动中,我有按钮打开相同的活动,但没有意图标志。我想要做的是使用默认的Android行为导航活动,但也根据导航项将它们堆叠在不同的堆栈中,如标签用法。

测试用例:

  1. 没有明确新标志的startActivity
  2. 带有clear-new标志的startActivity
  3. 我希望回到第一个活动,因为我用新任务开始了第二个活动,所以第一个应该留在第一个堆栈中)但我发现第一个已经被破坏了。

1 个答案:

答案 0 :(得分:3)

第一个活动(没有标志的活动)被销毁,因为第二个活动的标志组合执行以下操作:

  1. FLAG_ACTIVITY_NEW_TASK:在新任务中启动活动,或者如果活动已存在,则将其任务置于前台。在我们的例子中,它还不存在。如果你只使用这个标志,那么你将拥有带有activity1的task1和带有activity2的task2。如果您没有点击后退按钮,则任务2和活动2将被解除,您将返回到task1和activity1。
  2. FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TASK:清除任务标志现在强制执行如果任务由新任务带到前面,那么它是第一个清理(​​活动结束)。引用documentation
  3.   

    如果在传递给Context.startActivity()的Intent中设置,则此标志将导致在活动开始之前清除与活动关联的任何现有任务。也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成。这只能与FLAG_ACTIVITY_NEW_TASK一起使用。

    结合使用,这意味着使用后退按钮可以将带有activity1的task1带到前面,但是clear标志会立即结束activity1。所以这就是为什么你遇到activity1已经完成了。