2011-04-07 82 views
13

在活动的onDestroy()回调中将实例变量专门设置为null是否是一个好主意?事情是这样的:onDestroy() - 设置或不设置实例变量为空?

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    mClassVariable1 = null; 
    mClassVariable2 = null; 
    mClassVariable3 = null; 
} 

如果我没有记错从Java SE,被隔离&没有连接到正在运行的程序&可以被垃圾收集反正任何引用。那么这是否会使上述多余?

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

我知道不会伤害这样做,但有时候会有一些类变量(引用个别的UI元素等),所以我很想知道我自己的理解,究竟发生了什么。

提前致谢!

+1

问题:虽然在退出活动或旋转设备时调用OnDestroy(),但该类是否仍保持实例化?如果是这样,否则将变量置零是不危险的。 – Salsero69 2011-04-07 14:51:08

+0

@ Salsero69:一个很好的问题。我不确定,希望这里的答案能够回答它。 – OceanBlue 2011-04-07 14:57:27

+0

我也面临同样的问题,希望有人给予更多的解释。我还将实例变量null置于摧毁中,但不确定它是否正常工作。 – bhavikkumar 2016-03-12 12:01:59

回答

7

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

+2

在onDestroy中可能需要显式空引用。您无法保证您的活动会立即消失,并因此保留记忆。看看http://stackoverflow.com/questions/17187004/large-memory-chunk-not-garbage-collected – Niels 2013-06-19 11:21:43

+1

在onDestroy中设置你的实例变量为null不是答案。查找您保留对被销毁活动的引用的泄漏。 onDestroy意味着系统完成了活动。确保你的代码是一样的。 – 2013-07-19 15:15:14