我的应用程序的活动结构可以是以下任何一种:
案例1:A> B> B> B> D
案例2:A> B> D
案例3:A> B> B> B>C> D
在活动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。然而,这似乎也有点迟钝,因为它是一个简单的应用程序,真的没有任何东西需要加载时间。此外,也有可能将活动B之后的所有活动放到一个新任务中,但这似乎更加迟钝和不必要。
TLDR:是否有其他方法来清除除A和新活动B之外的所有堆栈?或者答案是我注定要使用变通方法。
编辑:我确实需要back stack
直到用户选择活动D中的特定选项。例如,如果他们只是在活动D或B(或C)活动中点击返回键,我确实需要它返回到前面的活动(默认情况下),因此完成活动,因为我将不起作用。
当你不需要在back stack
上添加Activity
时,在调用New Activities with Intent
时只需调用finish()
方法。
如果您的调用顺序是
A -> B -> C -> D -> E
从E返回b,那么
从Activity C
启动Activity D
时,同时调用finish()
,从Activity D
启动Activity E
时,同时调用finish()
。