FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_CLEAR_TASK 行为怪异

FLAG_ACTIVITY_NEW_TASK and FLAG_ACTIVITY_CLEAR_TASK acts weird

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

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

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

测试用例:

  1. 没有清除新标志的 startActivity
  2. 带有清除新标志的 startActivity
  3. 返回

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

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

  1. FLAG_ACTIVITY_NEW_TASK:在新任务中启动 activity,或者如果 activity 已经存在,则将其任务置于前台。在我们的例子中,它还不存在。如果你只使用这个标志,那么你将有 task1 和 activity1 和 task2 与 activity 两个。如果您没有点击后退按钮,任务 2 和 activity 2 将被关闭,您 return 返回到任务 1 和 activity1.
  2. FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TASK:clear task标志现在强制执行前面被new task然后先清理(activities结束)。引用 documentation:

If set in an Intent passed to Context.startActivity(), this flag will cause any existing task that would be associated with the activity to be cleared before the activity is started. That is, the activity becomes the new root of an otherwise empty task, and any old activities are finished. This can only be used in conjunction with FLAG_ACTIVITY_NEW_TASK.

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