是否可以清除此任务中的所有先前活动?

时间:2017-01-18 08:25:33

标签: android android-activity

是否可以仅在当前任务中清除所有先前的活动? 所以,我的活动堆栈如下所示:

A - B - (NEW_TASK) - C - D - E

是否可以使用一些标志启动E:

A - B - (NEW_TASK) - C - D - (SOME_FLAG) - E 

将删除活动C和D(当前任务中的所有先前活动),因此在单击Back in activity E app后将返回到新任务的启动位置(活动B)?在启动活动E之后,后栈应该是这样的:

A - B - E 

3 个答案:

答案 0 :(得分:0)

您可以通过调用Activity()来清除finish。覆盖onBackPressed()并使用intent从E转到B Activity

答案 1 :(得分:0)

FLAG_ACTIVITY_CLEAR_TOP

  

如果设置,则正在启动的活动已在运行中   当前任务,然后而不是启动它的新实例   活动,其上的所有其他活动将被关闭   这个意图将作为一个传递到(现在在顶部)旧活动   新的意图。

     

例如,考虑一个由活动组成的任务:A,B,C,D。   如果D调用带有解析为的Intent的startActivity()   活动B的组成部分,然后C和D将完成,B接收   给定的Intent,导致堆栈现在为:A,B。

     

上例中活动B的当前运行实例将会   要么接收你从这里开始的新意图   onNewIntent()方法,或者自己完成并重新使用new   意图。如果它已宣布其启动模式为"多个" (该   默认情况下,您没有设置FLAG_ACTIVITY_SINGLE_TOP   意图,然后它将完成并重新创建;所有其他发射   模式或如果设置了FLAG_ACTIVITY_SINGLE_TOP,那么此Intent将是   传递到当前实例的onNewIntent()。

     

此启动模式也可用于与之配合使用   FLAG_ACTIVITY_NEW_TASK:如果用于启动任务的根活动,   它会将任何当前正在运行的任务实例带到   前景,然后将其清除到其根状态。这是特别的   例如,从通知启动活动时很有用   管理器。

答案 2 :(得分:0)

您有很多方法可以实现您的用例

可能的方法1:您可以使用startActivityForResult方法从C,D启动活动,并根据结果E您可以设法完成活动C,D on onActivityResult()

可能的方式2:如果你不想把活动放在后台上, 你可以在他们开始另一个活动后完成那些活动C,D

可能的方法3:您可以使用Intent Flags来操纵Backstack

如果您需要进一步的帮助,请告诉我

了解您的信息 您可以在Activity中使用finishAffinity()任务来完成以前的所有活动。 它将完成活动以及紧接其下的所有活动 在当前任务中具有相同的亲和力。这通常是 当应用程序可以启动到另一个任务时使用(例如 来自它理解的内容类型的ACTION_VIEW)和用户 使用向上导航切换出当前任务并进入 自己的任务。在这种情况下,如果用户已导航到 第二个申请的任何其他活动,所有这些都应该 作为任务切换的一部分从原始任务中删除。 请注意,此完成不允许您提供结果 到上一个活动,如果你正在尝试,将抛出异常 这样做