相关疑难解决方法(0)

清除整个历史记录堆栈并在Android上启动新活动

是否可以在堆栈上启动活动,清除之前的整个历史记录?

情况

我有一个活动堆栈,可以是A-> B-> C或B-> C(屏幕A选择用户令牌,但许多用户只有一个令牌).

在屏幕C中,用户可以采取使屏幕B无效的动作,因此应用程序想要将它们带到屏幕A,而不管它是否已经在堆栈中.屏幕A应该是我的应用程序中堆栈上唯一的项目.

笔记

还有许多其他类似的问题,但我没有发现任何可以回答这个问题的问题.我试过调用getParent().finish()- 这总是导致空指针异常.FLAG_ACTIVITY_CLEAR_TOP仅在活动已在堆栈上时才有效.

android android-activity back-stack

313
推荐指数
10
解决办法
19万
查看次数

Android:使用singleTop或SingleTask恢复活动

我已经在很长一段时间内一直在寻找关于我的问题的解决方案,但是Android文档并不是那么清晰,而且网络解决方案也不能完全运行.

我正在开发一个游戏,其中主要的Activity(游戏发生的地方)可以调用另一个简单的Activity而不是返回.它会像这样工作:

  1. 如果用户单击"主页"按钮然后返回游戏,则必须停止活动,然后在不通过onDestroy的情况下恢复活动(否则会丢失游戏状态)
  2. 当主Activity调用另一个Activity然后返回游戏时,功能相同.
  3. 当用户按下退出按钮时,游戏必须完全退出

对于前两点,我尝试了这一点,以确保创建并调用了一个且只有一个主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中返回.

android android-intent android-activity

6
推荐指数
1
解决办法
6964
查看次数