1

我一直在测试意图标志,但我需要澄清一些事情。我的导航抽屉中有两个项目,单击时我会这样做,

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

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

测试用例:

  1. 没有 clear-new 标志的 startActivity
  2. 带有 clear-new 标志的 startActivity
  3. 背部

我希望回到第一个活动,因为我用一个新任务开始了第二个活动,所以第一个应该留在第一个堆栈中)但我发现第一个已经销毁。

4

1 回答 1

4

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

  1. FLAG_ACTIVITY_NEW_TASK:在新任务中启动活动,或者如果活动已经存在,则将其任务带到前台。在我们的例子中,它还不存在。如果您只使用此标志,那么您将拥有带有活动 1 的任务 1 和带有活动 2 的任务 2。如果您没有点击后退按钮,task2 和 activity 2 将被关闭,您返回 task1 和 activity1。
  2. FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK:清除任务标志现在强制如果一个任务被新任务带到前面,那么它首先被清理(活动完成)。引用文档

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

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

于 2015-12-01T15:17:01.497 回答