我目前正在開展一項有幾項活動的Android應用程序。大多數時候,該應用程序工作正常,但不時發生Out of Memory Exception
。 (通常當試圖加載大背景圖像的下一個活動)Android內存不足異常和暫停的活動
我找不到任何明顯的內存泄漏,所以我創建了一個堆轉儲發生異常時(如描述here),並試圖分析它與墊。 我之前沒有做過這樣的事情,所以我不確定我應該找什麼。我開始通過點擊較大字節的對象,第二個似乎是一個位圖屬於一個ImageButton
:
的GC根的路徑顯示我的com.android.internal.policy.impl.PhoneWindow例如:
的事情是,唯一ImageButton
在我的整個應用程序在我啓動活動和開展活動和崩潰活性之間有至少2周以上的活動。
那麼,爲什麼這個圖像仍然在堆? ImageButton
只是在使用android:src屬性的佈局xml文件中定義,沒有任何內容通過代碼完成。堆中的早期活動還有很多其他較小的對象。
我也寫了一個小HelloWorld應用程序,看看它的堆轉儲,看起來,android保持堆中以前的活動的對象。如果是這種情況,那麼Out of Memory Exception
必須有一天被拋出,所以我想我的分析一定是錯誤的:/
我現在正在回收大圖像並調用finish()以便不再需要的活動 - 沒有OOM異常可見:) – FahneImWind 2013-03-02 21:26:09