gpt4 book ai didi

android - FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_CLEAR_TASK 行为怪异

转载 作者:行者123 更新时间:2023-12-05 03:12:19 24 4
gpt4 key购买 nike

我一直在测试 Intent 标志,但我需要澄清一些事情。我的抽屉导航中有两个项目,单击我执行此操作,

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

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

测试用例:

  1. 没有 clear-new 标志的 startActivity
  2. 带有 clear-new 标志的 startActivity
  3. 返回

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

最佳答案

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

  1. FLAG_ACTIVITY_NEW_TASK:在新任务中启动 Activity ,或者如果 Activity 已经存在,则将其任务带到前台。在我们的例子中,它还不存在。如果您只使用这个标志,那么您将有 task1 和 activity1 以及 task2 和 activity 2。如果您没有点击后退按钮,任务 2 和 Activity 2 将被取消,您将返回到任务 1 和 Activity 1。
  2. FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TASK:clear task 标志现在强制执行,如果一个任务被新任务带到前面,那么它是第一个清洁( Activity 完成)。引用 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.

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

关于android - FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_CLEAR_TASK 行为怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34023452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com