如何在Android中清除除前两个活动外的所有活动?



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

案例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_TOPACTIVITY_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()

相关内容

  • 没有找到相关文章