2011-07-14 131 views
8

有沒有辦法「清理」您創建的對象和其他變量?或者它們是自動處理的還是我有這個整體概念錯誤?做這件事的正確方法是什麼?我儘量避免使用GC。Android正確清理/處置

回答

12

使用不帶內存管理的GC語言進行清理的唯一方法是GC。您可以強制使用GC,但不建議使用GC(GC非常好),以便將GC更清潔的主動設置對象設置爲空。

增加:

而且儘量使對象作爲當地的地,這樣他們GCed,因爲他們範圍之。

2

只要不保留對對象(變量)的引用,大多數情況下它們都會被清除。有些東西就像cursorbitmap雖然需要關閉才能刪除,以防止內存泄漏。

只要您的對象創建不在頂層,我認爲您不必擔心GC。注意:GC是java的一部分。你無法避免它。

附錄1:如果你真的擔心它,你可以重新使用變量。這樣可以將對象創建保持在最低限度,但這樣做會使該變量丟失,並且無法存儲大量數據。

3

調用System.gc()將強制垃圾收集發生。

有一個系統計算您創建的對象的引用。如果你循環了很多並且創建了很多對象,你將會在這些對象堆積的地方創建一段時間。系統會在您的處理器沒有做任何事情時收集垃圾,或者在收集之前等待您需要更多空閒內存。如果您已經處理了一段時間,由於處理過程中發生垃圾收集,您的性能會出現問題。

請查看此頁面,搜索「垃圾收集」

http://developer.android.com/guide/practices/design/performance.html

注:具有應用程序上下文創建會活到應用程序執行的最後什麼。使用活動上下文創建的任何內容都將一直存在,直到活動結束。這兩種情況會導致內存泄漏!

3

有關具體到Android一個更完整的答案:

請務必閱讀application lifecycle爲Android。它將幫助您避免Android中的活動泄漏。

2

Android的活動有onDestroy()方法。您可以使用此方法關閉打開的連接或對話框或關閉一些掛起的任務。
您還可以閱讀Java GC以更好地理解它。我會推薦SCJP書籍,垃圾收集章節。它很好地解釋了一個對象何時有資格進行垃圾回收。

+0

我相信OP在談論物體的活動。作爲一般規則,你不應該調用你的活動onDestroy()方法。讓操作系統處理它。 – AedonEtLIRA