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

时间:2019-03-18 05:48:48

标签: android android-activity android-navigation

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

A> B> C> D> E

场景1:

如果用户使用的是 E ,则在点击后退按钮时,应导航到 D> C> B> A

场景2:

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

像X> Y,如果我们在Y上设置 finish (完成),则将显示X。类似如果我在 E 显示B ,则应从堆栈中清除 E> D> C

我需要同时实现这两种情况。

(使用场景编辑^^^^)

如果用户正在进行 E 活动,并且想移动 B 。如果 B 在历史记录堆栈中,我们可以清除C> D> E ,以便用户可以导航到 B 而无需startActivity(B)。并且A应该在历史中。

如果活动在堆栈中可用,那么如果没有startActivity(B),则应从历史记录中加载。

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

我想清除部分历史记录。

能否实现?如果是这样,请怎么做?

2 个答案:

答案 0 :(得分: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 的现有实例将不会完成,并且不会创建新实例

答案 1 :(得分:-1)

您可以使用

android:launchMode="singleTask"

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