2

我很熟悉,按下后退键会导致活动被“破坏”,或者当开发人员调用函数finish(),或者当系统需要内存等时......

并且还熟悉我们需要在 onDestroy 中执行清理过程,如unBindDrawables(参见示例)以避免 OutOfMemory 异常。

我的问题是:

活动的破坏是否意味着对活动对象的引用被删除?即活动对象可用于GC?如果是这样,为什么我们需要明确删除对活动相关视图的引用?

考虑示例:

如果对象A具有对对象B的引用,而B仅由A引用,那么如果我们取消A的引用,则无需将B的引用显式设置为 null,两者都将被 GC-ed...

我的直觉告诉我,活动的情况是这样的……请告诉我我的错误在哪里。

谢谢!

4

2 回答 2

2

活动的破坏是否意味着对活动对象的引用被删除?即活动对象可用于GC?

是的,只要 Android 放弃该活动。如果您从静态上下文中(直接或间接)引用它,它将不会被垃圾收集。

如果是这样,为什么我们需要明确删除对活动相关视图的引用?

您不需要“显式删除对活动关联视图的引用”。

于 2012-08-09T20:53:44.847 回答
0

当您按下后退按钮时,您的应用程序不会被破坏而是暂停并且 SO 调用 onPause() 方法。如果 SO 检测到例如内存不足的情况,它可以被销毁,然后它会销毁并调用 onDestroy 方法。在这种方法中,您必须清理线程(如果您启动了它们)或所有不必要的东西并导致资源消耗。如果你熟悉 Servlet,android 中的 onDestroy 方法非常相似。希望这对你有帮助

于 2012-08-10T09:10:39.087 回答