mor*_*hio 6 android android-intent android-activity
我已经在很长一段时间内一直在寻找关于我的问题的解决方案,但是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中返回.
你绝对不想搞乱launchMode. 这不是解决问题的方法,只会给你带来更多问题。
Android 可以(并且将会)随时终止您的进程(尤其是当您的应用程序位于后台时)。因此,您需要将游戏状态保存在 中,因为这是保证您拥有的onPause()唯一机会。
onPause()无论如何,如果你以标准行为保存游戏将覆盖你的前 2 分。
对于第三点,有以下几种选择:
startActivityForResult()查看我的答案来开始所有活动像这样:
Intent intent = new Intent(this, MyRootActivity.class); // this is the starting activity for your application
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // tells Android to finish all other activities in the stack
intent.addExtra("exit", "true"); // this tells your root activity that you want to exit
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
现在,MyRootActivity您想将此代码添加到onCreate():
Intent intent = getIntent();
if (intent.hasExtra("exit")) {
// User wants to exit
finish();
}
Run Code Online (Sandbox Code Playgroud)