我的应用程序的活动结构可以是以下任何一种。
案例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_TOP
并ACTIVITY_FLAG_SINGLE_TOP
使用它来启动活动 A 并在 onNewIntent 或 onCreate 方法中捕获额外内容以立即启动活动 B 的实例。
但是,在代码方面,这对我来说似乎相当尴尬。特别是考虑到活动 A 是一个主屏幕,应该(从直观的事物流中)只有在帐户之间切换时才能访问(从技术上讲,角色,因为它是一个游戏)。
我想到的另一个解决方法是在 A 和 B 之间插入一个加载屏幕活动,我可以“召回”并从中重新启动 B。但是,这似乎也有点迟钝,因为它是一个简单的应用程序,实际上没有任何需要加载时间的东西。此外,还有可能将 Activity B 以后的所有活动都放在一个新任务中,但这似乎更加迟钝和不必要。
TLDR:除了 A 和新活动 B 之外,还有其他方法可以清除所有堆栈吗?或者是我注定要使用解决方法的答案。
编辑:我确实需要back stack
直到用户在活动 D 中选择特定选项为止。例如,如果他们只是在活动 D 或 B(或 C)活动之一中按下后退键,我确实需要它回到前一个活动(默认情况下),所以我继续完成这些活动是行不通的。