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
的现有实例将不会 完成并且新实例 不会创建。
想象一下这个 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
的现有实例将不会 完成并且新实例 不会创建。