所以我正在开发这个小游戏,它目前使用 2 个活动:菜单活动和实际游戏活动;Game Activity 由 Menu Activity 启动(没有问题)
然后我可以使用返回键从 Game Activity 切换到 Menu Activity:
public void onBackPressed() {
super.onBackPressed();
}
现在我回到了菜单活动。我创建的游戏活动已停止(我猜);当我离开游戏活动时,如何返回它(如何重新启动它)?
所以我正在开发这个小游戏,它目前使用 2 个活动:菜单活动和实际游戏活动;Game Activity 由 Menu Activity 启动(没有问题)
然后我可以使用返回键从 Game Activity 切换到 Menu Activity:
public void onBackPressed() {
super.onBackPressed();
}
现在我回到了菜单活动。我创建的游戏活动已停止(我猜);当我离开游戏活动时,如何返回它(如何重新启动它)?
您需要使用数据存储中描述的任何方法手动保存游戏状态。
但是,如果您启动菜单活动的新副本:
Menu Activity ->
Game Activity ->
Menu Activity
您可以返回到 Game Activity 而不是完全重建它。但是当然不能保证游戏Activity不会被垃圾回收器销毁,所以还是需要将游戏的状态保存在onPause()
.
假设您将菜单用作一种“暂停”菜单,其中后退按钮暂停游戏,您可以让后退按钮为菜单活动创建新的意图,然后让菜单活动中的后退按钮正常工作。
当然,当你启动菜单活动时,你仍然应该保留游戏数据——因为用户可以从菜单中关闭屏幕——但是当你启动菜单时,系统会固有地将你的游戏活动(和数据)保存在内存中。
@Override
public void onBackPressed() {
Intent intent = new Intent(GameActivity.this, MenuActivity.class);
startActivity(intent);
}
重写一个方法只是为了调用 super 是绝对没有意义的。请重新检查覆盖的含义:如果您不覆盖,那么您的子类方法 A 将与超类方法 A 相同。因此,您可以覆盖以在子类中创建不同版本的 A,但不能调用超类方法A,没用。
关于 Activity,在 android 中,你不能希望不在堆栈上的 Activity 会被保留。您可以将其添加到清单中:
<activity name=".GameActivity"
...
android:launchMode="singleTop" />
但即使如此,它也不能保证 android 会在重新启动时清理您的活动并重新创建它。这就是android保存资源的方式。
但更好的方法是从 GameActivity 内部再次调用 (startActivity) MenuActivity。这样,您的旧 GameActivity 仍将位于活动堆栈中。但实际上,总会有一些限制情况,android 会重新创建 GameActivity。例如,如果系统处于内存压力之下。
最好的办法是保持 GameActivity 的状态,这样即使是新实例也将重新置于与旧实例相同的状态。