是否可以在堆栈上启动活动,清除之前的整个历史记录?
情况
我有一个活动堆栈,可以是A-> B-> C或B-> C(屏幕A选择用户令牌,但许多用户只有一个令牌).
在屏幕C中,用户可以采取使屏幕B无效的动作,因此应用程序想要将它们带到屏幕A,而不管它是否已经在堆栈中.屏幕A应该是我的应用程序中堆栈上唯一的项目.
笔记
还有许多其他类似的问题,但我没有发现任何可以回答这个问题的问题.我试过调用getParent().finish()- 这总是导致空指针异常.FLAG_ACTIVITY_CLEAR_TOP仅在活动已在堆栈上时才有效.
我已经在很长一段时间内一直在寻找关于我的问题的解决方案,但是Android文档并不是那么清晰,而且网络解决方案也不能完全运行.
我正在开发一个游戏,其中主要的Activity(游戏发生的地方)可以调用另一个简单的Activity而不是返回.它会像这样工作:
对于前两点,我尝试了这一点,以确保创建并调用了一个且只有一个主Activity:android:launchMode="singleTask"或者android:launchMode="singleTop"不幸的是,第一个问题适用于第一个问题而第二个适用于第二个问题,而不是两个问题!
我认为问题是:使用singleTop时,当第二个活动调用它时,主Activity实际上并不在堆栈的顶部(要清楚,我不明白应该是什么情况,我称之为活动是已经在堆栈的顶部!).相反,singleTask确保Activity在其堆栈中是唯一的,但是在用户单击Home按钮并返回到Application之后,其他任务被调用,我是对的吗?
无论如何,这是一个聪明的解决方案还是我应该在onStop/onPause中保存我的游戏状态然后在onResume中恢复?
对于第三点,我尝试添加android:noHistory="true"到每个Activity,然后当用户单击退出按钮时,我调用一个新的Activity,除了finish()onCreate上的方法之外什么都不做,调用这个Activity intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);并且它的launchMode是singleInstance,但它没有'工作,它只是总是在主Activity中返回.