2

我正在尝试做一些应该很简单的事情。

我有一个游戏,它启动一个带有提供各种选项的屏幕的 StartActivity,其中一个是“开始游戏”。

当用户选择此选项时,游戏会以类似于以下的代码启动:

Intent i = new Intent();
i.setClass(context, GameActivity.class);
context.startActivity(i);

这一切都很好。当在游戏中按下“返回”按钮时,控制返回到此 StartActivity。再说一次,这很好。

但是,按下“返回”会导致调用“onDestroy()”(根据文档)——这意味着当再次按下“开始游戏”时,GameActivity 从头开始​​。

我想要的是当按下“返回”时将 GameActivity 保存在内存中,以便按下“开始游戏”返回到它停止的位置。

这是几乎每个游戏都会做的事情,所以必须非常简单,但我不知道该怎么做。我一直在尝试以返回 StartActivity 的方式重载 onBackPressed(),但没有成功;做类似的事情:

public void onBackPressed() {
    Intent i = new Intent(this, StartActivity.class);
    startActivity(i);
}

意味着堆栈永远增长,即 A -> B -> A 离开 ABA 而不仅仅是 A。

我知道一般活动流程(http://developer.android.com/reference/android/app/Activity.html)。

我是否以错误的方式启动 GameActivity?

#

作为对僚机的回应,我知道各种活动状态,如果需要释放内存,可能会调用 onDestroy()。我确实在 onPause() 上保存游戏状态并在 onResume() 上加载,但不是当时内存的完整状态。

如果我按“主页”,则应用程序实际上是“最小化”,并返回到重新启动时的位置 - 不会调用 onDestroy()。我试图模仿这种行为,但将应用程序返回到 StartActivity 而不是“home”。

据我所知,后退按钮总是调用 onDestroy() (或者至少是 finish() )。

发生这种情况时,所有游戏都会保存完整状态吗?我会感到惊讶,但也许他们会。

4

1 回答 1

3

按下后退按钮时,没有 Activity 被完全销毁。Android 维护着一堆正在运行的活动。当用户按下后退按钮时,当前活动从堆栈中弹出,并显示前一个活动。但是弹出的活动没有被破坏,它仍然在内存中。它只会在系统内存不足时被销毁,然后onDestroy() 才会被调用。

在您的 Activity 由于用户按下返回而离开屏幕之前,android 会调用您的 Activity 的许多方法,您可以在其中保存其状态,并在用户再次导航到您的 Activity 时恢复它。在此处浏览 Activity 生命周期文档和示例:http: //developer.android.com/reference/android/app/Activity.html

onPause()因此,在或方法之一上保存您的游戏活动状态onStopped(),在主菜单上,如果用户选择“恢复”,则从保存的状态开始您的游戏活动,否则如果用户选择“新游戏”,则从头开始您的游戏活动.

于 2012-08-10T16:35:34.200 回答