我已经花费了很长时间寻找解决方案,但是Android文档不够清晰,网上的解决方案也不能完全解决我的问题。
我正在开发一个游戏,其中主Activity(游戏进行的地方)可以调用另一个简单的Activity,然后返回。它应该像这样工作:
1. 如果用户点击Home按钮,然后返回到游戏,Activity必须在不通过onDestroy的情况下停止并恢复(否则将丢失游戏状态) 2. 当主Activity调用其他Activity然后返回到游戏时,同样的功能。 3. 当用户按退出按钮时,游戏必须完全退出。
对于前两个问题,我尝试使用“android:launchMode =”singleTask“”或“android:launchMode =”singleTop“”,以确保创建和调用一个主Activity,但不幸的是,第一个只适用于第一个问题,第二个只适用于第二个问题,而不是同时适用。
我认为问题在于:使用singleTop时,当第二个Activity调用它时,主Activity实际上并没有在堆栈的顶部(换句话说,我不明白何时会出现这样的情况,即调用已经在堆栈的顶部的Activity!)。相反,singleTask确保Activity在其堆栈中是唯一的,但是用户点击Home按钮并返回应用程序后,将调用其他Task,对吗?
无论如何,这是一个明智的解决方案,还是我应该在onStop / onPause中保存游戏状态,然后在onResume中恢复它?
对于第三个问题,我尝试将“android:noHistory =”true“”添加到每个Activity中,然后当用户单击退出按钮时,调用一个什么都不做的新Activity,但在onCreate上仅使用finish()方法。此Activity使用“intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);”进行调用,并且其launchMode为“singleInstance”,但它不起作用,它总是返回主Activity。
我正在开发一个游戏,其中主Activity(游戏进行的地方)可以调用另一个简单的Activity,然后返回。它应该像这样工作:
1. 如果用户点击Home按钮,然后返回到游戏,Activity必须在不通过onDestroy的情况下停止并恢复(否则将丢失游戏状态) 2. 当主Activity调用其他Activity然后返回到游戏时,同样的功能。 3. 当用户按退出按钮时,游戏必须完全退出。
对于前两个问题,我尝试使用“android:launchMode =”singleTask“”或“android:launchMode =”singleTop“”,以确保创建和调用一个主Activity,但不幸的是,第一个只适用于第一个问题,第二个只适用于第二个问题,而不是同时适用。
我认为问题在于:使用singleTop时,当第二个Activity调用它时,主Activity实际上并没有在堆栈的顶部(换句话说,我不明白何时会出现这样的情况,即调用已经在堆栈的顶部的Activity!)。相反,singleTask确保Activity在其堆栈中是唯一的,但是用户点击Home按钮并返回应用程序后,将调用其他Task,对吗?
无论如何,这是一个明智的解决方案,还是我应该在onStop / onPause中保存游戏状态,然后在onResume中恢复它?
对于第三个问题,我尝试将“android:noHistory =”true“”添加到每个Activity中,然后当用户单击退出按钮时,调用一个什么都不做的新Activity,但在onCreate上仅使用finish()方法。此Activity使用“intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);”进行调用,并且其launchMode为“singleInstance”,但它不起作用,它总是返回主Activity。
launchMode="singleTask"
。标准的启动模式可以实现你想要的功能。如果不能,那么你可能在做其他错误的事情。整个应用程序应该在一个任务中运行,而不是多个任务中。没有理由这样做。 - David Wasser