2012-08-09 89 views
2

這是我熟悉的,即按返回鍵會導致活動獲得「破壞」,或當開發者調用函數完成(),或當系統需要內存等..Activity.onDestroy幕後真正的破壞是什麼意思?

並且也很熟悉我們需要在onDestroy中執行清理過程,如unBindDrawables(請參閱example),以避免OutOfMemory異常。

我的問題是:

被刪除

不活動的破壞意味着參考活動對象?即活動對象是否可用於GC?如果是這樣,爲什麼我們需要顯式刪除對活動相關視圖的引用?

考慮例如:

如果對象具有參照對象只提到,那麼如果我們廢了的參考有沒有必要明確設置B的參考爲空,兩者都將進行GC編輯...

我的intuitio ñ告訴我,活動的情況是這樣的...請告訴我我的錯誤在哪裏。

謝謝!

回答

1

確實activity的破壞意味着對activity對象的引用被刪除了嗎?即活動對象是否可用於GC?

是的,只要Android放棄了這項活動。如果您從靜態上下文中直接或間接引用它,它將不會被垃圾收集。

如果是這樣,爲什麼我們需要顯式刪除對活動相關視圖的引用?

您不需要「顯式刪除對活動相關視圖的引用」。

+0

在此先感謝CommonsWare,我很滿意第一個問題。 – sevteen 2012-08-09 21:05:32

+0

但關於第二...爲什麼然後「unbindDrawables」解決OutOfMemory錯誤?或者,也許我誤解了unbindDrawables的含義? – sevteen 2012-08-09 21:11:00

+0

@dioholic:該博客文章中沒有任何內容是絕對必要的,儘管部分內容(尤其是背景內容)在某些情況下可能很有用。請參閱http://stackoverflow.com/a/7045044/115145。 – CommonsWare 2012-08-09 22:46:31

0

當您按下後退按鈕時,您的應用程序不會被銷燬,但暫停並且SO調用onPause()方法。 它可以被銷燬,如果SO檢測到,例如,低內存條件,然後它破壞並將調用onDestroy方法。 在這種方法中,您必須清理線程(如果您啓動它們)或不再需要的所有內容,並導致資源消耗。 如果您熟悉Servlet,android中的onDestroy方法非常相似。 希望這可以幫到你