gpt4 book ai didi

android-activity - Android 使用 onBackPressed() 避免 onDestroy()

转载 作者:行者123 更新时间:2023-12-04 05:36:08 27 4
gpt4 key购买 nike

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

我有一个游戏,它启动一个带有提供各种选项的屏幕的 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。

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

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

#

响应wingman,我知道各种 Activity 状态,如果需要释放内存,可能会调用onDestroy()。我确实在 onPause() 上保存游戏状态并在 onResume() 上加载,但不是当时内存所处的完整状态。

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

后退按钮总是调用 onDestroy() 就我可以从文档中收集到的信息而言(或至少完成())。

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

最佳答案

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

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

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

关于android-activity - Android 使用 onBackPressed() 避免 onDestroy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com