是否可以仅在当前任务中清除所有先前的活动? 所以,我的活动堆栈如下所示:
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
答案 0 :(得分:0)
您可以通过调用Activity
()来清除finish
。覆盖onBackPressed
()并使用intent
从E转到B Activity
。
答案 1 :(得分:0)
如果设置,则正在启动的活动已在运行中 当前任务,然后而不是启动它的新实例 活动,其上的所有其他活动将被关闭 这个意图将作为一个传递到(现在在顶部)旧活动 新的意图。
例如,考虑一个由活动组成的任务: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)和用户 使用向上导航切换出当前任务并进入 自己的任务。在这种情况下,如果用户已导航到 第二个申请的任何其他活动,所有这些都应该 作为任务切换的一部分从原始任务中删除。 请注意,此完成不允许您提供结果 到上一个活动,如果你正在尝试,将抛出异常 这样做