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