2011-04-07 85 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