【问题标题】:Android Activity history tracking and clearing partiallyAndroid Activity 历史记录跟踪和部分清除
【发布时间】:2019-08-08 11:00:50
【问题描述】:

想象一下这个活动历史堆栈:

A > B > C > D > E

场景 1:

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

场景 2:

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

Like X > Y 如果我们在 Y 上设置 finish,X 将被显示。类似如果我在 E 上录制 Show BE > D > C 应该从堆栈中清除。

我需要实现这两种情况。

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

如果用户正在进行 E 活动并想要移动 B。如果 B 在历史堆栈中,我们可以清除 C > D > E 以便用户可以在没有 startActivity(B) 的情况下导航到 B。 A 应该在历史中。

如果堆栈中有一个 Activity,那么如果不是 startActivity(B),它应该从历史中加载。

如果我使用 FLAG_ACTIVITY_CLEAR_TOP/FLAG_ACTIVITY_NEW_TASK,它将清除全部历史记录并开始新的活动。

我想清除部分历史记录。

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

【问题讨论】:

标签: android android-activity android-navigation


【解决方案1】:

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

对于这种情况:

如果用户在 E 上然后点击自定义按钮“显示 B”,那么它 应该清除 E > D > C。这类似于 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 并返回到 B 的现有实例。

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

【讨论】:

    【解决方案2】:

    你可以使用

    android:launchMode="singleTask"
    

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

    【讨论】:

    • 请不要建议使用特殊的启动模式singleTasksingleInstance。这些产生的问题多于解决的问题,副作用没有得到很好的记录或理解,而且在 99% 的情况下它们是不必要的。这是个坏建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多