onDestroy() - 设置或不设置实例变量为null?

Oce*_*lue 14 android android-lifecycle

在活动的onDestroy()回调中专门将实例变量设置为null是一个好主意吗?像这样的东西:

    @Override
protected void onDestroy() {
    super.onDestroy();
    mClassVariable1 = null;
    mClassVariable2 = null;
    mClassVariable3 = null;
}
Run Code Online (Sandbox Code Playgroud)

如果我从Java SE中正确记得,任何被隔离但未连接到正在运行的程序的引用都可以进行垃圾收集.那么这会使上述多余吗?

另一方面,移动设备的生命周期不同,以上是最佳实践吗?

我知道这样做不会有什么坏处,但有时会有一些类变量(对单个UI元素的引用等),所以我真的想知道我自己的理解,真正发生了什么.

提前致谢!

Mic*_*ine 7

当你说垃圾收集器将获取被隔离的引用时,你说得对.具体而言,将收集未连接到执行线程的任何引用图.因此,没有充分的理由将变量设置为null,我可以看到.代码维护成本远远超过任何优势.

  • 在onDestroy中显式空引用可能是必要的.您不能保证您的活动会立即杀死并因此保留记忆.看看http://stackoverflow.com/questions/17187004/large-memory-chunk-not-garbage-collected (2认同)
  • 在 onDestroy 中将实例变量设置为 null 不是答案。查找您保留对已销毁活动的引用的泄漏。onDestroy 意味着系统完成了 Activity。确保您的代码也是如此。 (2认同)