Android Activity 部分历史记录跟踪和清除

Android Activity history tracking and clearing partially

想象一下这个 activity 历史堆栈:

A > B > C > D > E

场景 1:

如果用户在 E 上,那么在点击后退按钮时它应该导航到 D > C > B > A.

场景 2:

如果用户在 E 然后点击自定义按钮 "Show B",那么它应该清除 E > D > C。这类似于 Finish().

如 X > Y 如果我们在 Y 上设置 finish,则将显示 X。类似如果我在 E 上粘贴 Show B 那么 E > D > C 应该从堆栈中清除.

我需要实现这两种情况。

(已编辑^^^^有场景)

如果用户在 E activity 上并且想要移动 B。如果 B 在历史堆栈中,我们可以 清除 C > D > E 以便用户可以导航到 B 没有 startActivity(B)。并且A应该在历史上。

如果堆栈中有 activity 可用,则如果不是 startActivity(B),它应该从历史记录中加载。

如果我使用 FLAG_ACTIVITY_CLEAR_TOP/FLAG_ACTIVITY_NEW_TASK,它将清除所有历史记录并开始新的 activity。

我想清除部分历史记录。

有可能实现吗?如果是这样,请问该怎么做?

您可以使用

实现此目的
android:launchMode="singleTask"

在您的清单文件中。有关更多信息,请参阅此文档 https://android.jlelse.eu/android-activity-launch-mode-e0df1aa72242

这一切都非常标准。不要使用任何特殊的启动模式。通常,按 BACK 只会完成当前 Activity 并返回到上一个。

对于这种情况:

If the user is on E then on tapping a custom button "Show B", then it should clear E > D > C. Which is similar to Finish().

E 中,要返回 B 的现有实例,请执行以下操作:

Intent intent = new Intent(this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

这将完成 E、D 和 C 以及 return 到 B 的现有实例。

标志FLAG_ACTIVITY_CLEAR_TOP告诉Android清除当前Activity和目标Activity之间的所有活动。如果您 不指定 FLAG_ACTIVITY_SINGLE_TOP 则目标 Activity 的现有实例也将完成并创建一个新实例。如果您确实指定 FLAG_ACTIVITY_SINGLE_TOP,那么目标 Activity 的现有实例将不会 完成并且新实例 不会创建