2

所以我正在开发这个小游戏,它目前使用 2 个活动:菜单活动和实际游戏活动;Game Activity 由 Menu Activity 启动(没有问题)

然后我可以使用返回键从 Game Activity 切换到 Menu Activity:

public void onBackPressed() {
    super.onBackPressed();
}

现在我回到了菜单活动。我创建的游戏活动已停止(我猜);当我离开游戏活动时,如何返回它(如何重新启动它)?

4

3 回答 3

1

您需要使用数据存储中描述的任何方法手动保存游戏状态。

但是,如果您启动菜单活动的新副本:

Menu Activity ->
    Game Activity ->
        Menu Activity

您可以返回到 Game Activity 而不是完全重建它。但是当然不能保证游戏Activity不会被垃圾回收器销毁,所以还是需要将游戏的状态保存在onPause().

于 2013-01-01T17:53:32.500 回答
0

假设您将菜单用作一种“暂停”菜单,其中后退按钮暂停游戏,您可以让后退按钮为菜单活动创建新的意图,然后让菜单活动中的后退按钮正常工作。

当然,当你启动菜单活动时,你仍然应该保留游戏数据——因为用户可以从菜单中关闭屏幕——但是当你启动菜单时,系统会固有地将你的游戏活动(和数据)保存在内存中。

@Override
public void onBackPressed() {
   Intent intent = new Intent(GameActivity.this, MenuActivity.class);
   startActivity(intent);
}
于 2013-01-01T17:52:16.767 回答
0

重写一个方法只是为了调用 super 是绝对没有意义的。请重新检查覆盖的含义:如果您不覆盖,那么您的子类方法 A 将与超类方法 A 相同。因此,您可以覆盖以在子类中创建不同版本的 A,但不能调用超类方法A,没用。

关于 Activity,在 android 中,你不能希望不在堆栈上的 Activity 会被保留。您可以将其添加到清单中:

 <activity name=".GameActivity" 
   ... 
   android:launchMode="singleTop" />

但即使如此,它也不能保证 android 会在重新启动时清理您的活动并重新创建它。这就是android保存资源的方式。

但更好的方法是从 GameActivity 内部再次调用 (startActivity) MenuActivity。这样,您的旧 GameActivity 仍将位于活动堆栈中。但实际上,总会有一些限制情况,android 会重新创建 GameActivity。例如,如果系统处于内存压力之下。

最好的办法是保持 GameActivity 的状态,这样即使是新实例也将重新置于与旧实例相同的状态。

于 2013-01-01T17:53:38.810 回答