我有活動A,它通過意圖啓動活動B.活動A沒有對活動B的引用,在我使用的應用程序單例中也沒有對活動B的引用。Android - 內存泄漏,我做錯了什麼?
當我創建活動B時,創建了幾千個對象。沒關係,這是一個帶有大量圖像的非常豐富的ListView的活動。
但是,當我按下後退按鈕並返回到活動A時,幾千個對象中只有大約十幾個被釋放。 onDestroy()也被稱爲活動。我正在使用DDMS查看堆信息,並且多次按'原因GC'強制其釋放內存。
我在其他應用程序(也使用列表視圖)上完成了相同的測試,並且按下後退按鈕然後按'原因GC'銷燬其對象的100%,所以它肯定不是錯誤。
有什麼建議嗎? :-)我已經閱讀了關於泄漏上下文的android文檔中的材料,但這沒有什麼幫助,因爲我沒有引用在其他地方銷燬的活動(或其中的任何內容)。另外,我還有許多其他活動都是以相同的方式工作的,並且不會釋放所有的摧毀記憶。我必須錯過明顯的東西?
編輯:我剛纔意識到我使用的AsyncTasks有活動的引用(或者作爲參數傳遞到doInBackground()或者可以通過outerClass.this訪問它們可以掛在線程池中,甚至在onPostExecute )
編輯:它泄漏就算我回去運行任何asynctasks :-(
編輯前:運行asynctasks如果我刪除AdMob廣告代碼之前沒有泄漏,但其中確實使用asynctasks的activites繼續泄漏。 。所以asynctask仍然是一個很好的候選人:-)
:你有沒有叫System.gc(); – Mak
這就是'原因GC'的原因 – Ted
它只會猜測沒有完整的代碼。你確定你沒有堅持你的'AsyncTasks'與他們對活動的引用或其他引用該活動的對象嗎?例如,在你的'Application'類中。 – ernazm