android - FLAG_ACTIVITY_CLEAR_TOP 没有按预期工作

标签 android android-intent android-activity

我有 4 个 Activity A、B、C、D、E,每个 Activity 都声明为 android:launchMode="singleInstance",A 是 B 的 parentActivity,B作为 C 的父 Activity,在 list 中。

现在用户像这样导航到 E:A > B > C > D > E。 我在 E 中有一个带有以下 onClickListener 的按钮

    Intent intent = new Intent(E.this, C.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

我需要什么?(同样根据文档,如果我理解正确,应该会发生这种情况)

  • Activity D 和 E 应该从堆栈中清除
  • Activity C 应该恢复接收 Intent (因为设置了 singleInstance,它不会被新创建)

    I want this stack: C | B | A

发生了什么?

  • Activity C 恢复接收 Intent
  • Activity D 和 E 从堆栈中清除。我可以一次又一次地点击后退按钮来查看 E、D、B、A。

    I get this stack: C | E | D | B | A

PS:我的问题与this非常相似但是,那里给出的答案不适合这个问题。我在那里和其他地方找到的一些答案:

  1. 我不能使用 NEW_TASK 标志,因为我需要让堆栈中的 A、B 保持 Activity 状态。
  2. 我不能在 D 上使用 startActivityForResult() 然后 finish() 它实际上是一种 hack,因为我在 E 中有其他决定性因素,例如根据用户输入将 Intent 传递给其他一些 Activity 。<
  3. 我无法在向 E 传递 Intent 时完成 () Activity D,然后在点击 C 时完成 () E,这实际上可以解决问题。但是,如果在 E 上按下后退,我希望它返回到 D 而不是 C。
  4. 当我在设置标志后执行 startactivity(intent) 后立即在 E 上尝试 finish() 时,它只是完成了 E,但没有完成 D。

最佳答案

Artem Mostyaev 的评论解决了这个难题!使用 singleTask

So what exactly was the mistake?

singleInstance用作 launchMode ,并且当一个 Activity 启动时,Android 确保它在一个新任务中启动,就像 NEW_TASK 一样。添加了标志,它本身是其中唯一的 Activity 。

所以当用户导航到 E 时,堆栈永远不会像 [ A |乙 |丙 | D | E] 相反,有五个不同的任务,例如 [A] [B] [C] [D] [E]。

当我用 CLEAR_TOP 尝试 E > C 时, 它确实在它的任务中搜索了 C 并试图清除 C 之后的所有 Activity 。但是 C 从来没有出现在 E 所在的任务中。

所以它尝试启动一个新的 Activity C,但是当我设置 launchMode 时至 singleInstance ,除了将 [C] 放在前面而其他任务保持不变外,它别无选择。

So how singleTask worked?

它像我想要的那样创建了堆栈 [ A |乙 |丙 | D | E] 和 CLEAR_TOP按预期工作。完成!

关于android - FLAG_ACTIVITY_CLEAR_TOP 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36111261/

相关文章:

android - 如何使用 https url 并使用 header 加载图像(授权)

java - 扩展类时膨胀错误

android - 从android中的包中检索数据

android - 如何在 android 应用程序中的 Activity 上添加声音按钮(打开关闭)?

android - 当父 Activity 调用 finishActivity() 时,结果代码为零

java - android 中的样式选项卡,如 google open source contacts

Android 应用在平板电脑的 Google Play 商店中不可见

android - SDK 更新后 Flutter 无法运行

android - 是否有可能在 oncreate 之前接受来自 Intent 的值(value)

android - 有通知时如何得到通知