【问题标题】:How can I clear all but the top two activities in Android?如何清除 Android 中除前两个活动之外的所有活动?
【发布时间】:2016-09-02 23:40:02
【问题描述】:

我的应用的活动结构可以是以下任何一种。

案例1:A > B > B > B > D

案例2:A > B > D

案例3:A > B > B > B > C > D

在 Activity D 中有一个选项,当我选择它时,我希望在堆栈中结束:

A > B

理想情况下,B 是该活动的新实例。起初我以为我在ACTIVITY_FLAG_CLEAR_TOP 中找到了我的解决方案,它适用于案例 2。但是,无论是案例 1 还是案例 3,它最终都会使所有“下腹部”B 活动保持原样。 A > B > B > B。

在互联网上搜索我发现了一个潜在的解决方案,使用 ACTIVITY_FLAG_CLEAR_TOPACTIVITY_FLAG_SINGLE_TOP 并使用它来启动活动 A 并在 onNewIntent 或 onCreate 方法中捕获额外的内容以立即启动活动 B 的实例。

但是,在代码方面,这对我来说似乎很尴尬。特别是考虑到活动 A 是一个主屏幕,应该(从直观的事物流中)只有在帐户之间切换时才可以访问(从技术上讲,角色,因为它是一个游戏)。

我想到的另一种解决方法是在 A 和 B 之间插入一个加载屏幕活动,我可以“召回”并从中重新启动 B。然而,这似乎也有点迟钝,因为它是一个简单的应用程序,实际上没有任何需要加载时间的东西。此外,还有可能将 Activity B 以后的所有活动都放在一个新任务中,但这似乎更加迟钝和不必要。

TLDR:除了 A 和新的活动 B 之外,还有其他方法可以清除所有堆栈吗?或者是我注定要使用变通方法的答案。

编辑:我确实需要 back stack 直到用户在活动 D 中选择特定选项。例如,如果他们只是在活动 D 或 B(或 C)活动之一中按下返回键,我确实需要它返回到前一个活动(默认情况下),所以我继续完成这些活动是行不通的。

【问题讨论】:

    标签: java android android-activity android-task onnewintent


    【解决方案1】:

    当您不需要将Activity 添加到back stack 时,在调用New Activities with Intent 时只需调用finish() 方法。

    例如, 如果你的调用顺序是

    A -> B -> C -> D -> E

    当从 E 回来时,它应该回到 B。然后,

    在从Activity C 启动Activity D 时,同时调用finish(),在从Activity D 启动Activity E 时,同时调用finish()

    【讨论】:

    • 我应该指定我确实需要完整的back stack,直到在活动 D 中选择特定选项为止。我将编辑我的问题以包含此内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多