gpt4 book ai didi

Android Activity 垃圾收集

转载 作者:行者123 更新时间:2023-12-01 17:43:21 25 4
gpt4 key购买 nike

我在开发一个有 2 个 Activity 的简单 Android 游戏时注意到了这种行为。

游戏有 2 个 Activity ,第一个是允许用户选择对手类型、级别等的屏幕,第二个是实际的游戏屏幕。第二个 Activity 创建一个 GameManager 类的对象,用于处理所有游戏处理。这个 GameManager 类还创建一个 CountDownTimer,它开始提示用户输入(超时时,游戏默认为对手)。

我注意到,如果用户退出第二个 Activity (返回到第一个 Activity ),然后再次启动新游戏,则前一个计时器仍会运行直到完成。我通过显式取消计时器(从第二个 Activity 的 onDestroy() )来处理此问题,因为仅将计时器对象设置为“null”并没有取消计时器。

但是我很好奇为什么即使在我第一次退出 Activity 后,之前的计时器仍在运行?当第二个 Activity 退出时,GC 不应该删除它实例化的所有对象(以及它创建的任何子对象)吗?很高兴知道所观察到的行为背后的原因?

TIA

最佳答案

Shouldn't the GC have deleted all the objects instantiated by the second Activity (and whatever child objects it created) when it was exited?

这不是垃圾收集的工作原理。 GC 不负责“删除对象”——它负责拾取“孤立”对象并释放其资源。即使这样,GC 也不能保证及时到达所有孤儿。

此外,如果您的代码不这样做,任何可能是“系统”对象并且需要显式释放的对象可能永远不会被释放。 GC 的其他问题可能包括创建其他线程(创建它们的 Activity 除外)可能引用的对象。

您提到了您的“计时器”,但没有解释您使用的是什么类型的类(class)。我建议专门阅读该类,看看其对删除/删除的影响(可能是明确的资源“释放”)。

GC 在任何平台上都是一个非常灰色的区域。对于 Android,它通常非常直接,但由于 Activity 生命周期的性质,很难预测会发生什么。

一般来说,在 Activity 中使用 onCreate、onPause 和 onResume 以及 savingInstanceState 和 SharedPreferences 等来跟踪正在发生的情况。

关于Android Activity 垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60907662/

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