2011-12-21 43 views
2

我正在對Android 4.0啓動器進行修改,並且我一直在運行許多OutOfMemoryErrors。自4.0.3更新以來,情況變得更糟(或者開始了,似乎在沒有問題的情況下,但我從來沒有正確測試過),並且我嘗試了很多很多事情來解決它。該錯誤也在股票啓動器中沒有我的修改。Android資源類內存使用

我查看了Eclipse Memory Analyzer中的heap hprof,發現系統Resources類佔用了內存的50%。幾乎所有這些都是Bitmaps,包括一些1MB 512x512px的位圖。由於我的手機是400x800,我不明白爲什麼它會擁有該分辨率的資源。然後還有800多個其他位圖,但這些都是更合理的尺寸。

該應用程序不包含800個資源,那麼它們有可能來自其他包?我知道該應用程序確實會從其他應用程序加載圖標和窗口小部件預覽,但仍然不超過800,即使它是其中的一部分,爲什麼它仍保留在內存中?

如果需要,我已經將hprof文件上傳到http://176.31.247.124/nebkat/heap.hprof

回答

0

原來,這是CyanogenMod中的一個問題。它現在已經修復。

0

Android的Bitmap類有一個'功能',它可以讓Bitmaps遠離虛擬機堆大小,這意味着您的位圖空間更小。

要解決OutOfMemory異常與位圖相關的唯一方法,必須在完成使用此位圖後使用Bitmap.Recycle();釋放資源。並使用Runtime.gc()刷新垃圾收集器。

我個人認爲這很糟糕,Bitmaps也應該包含在你的應用程序的VM堆大小中,但這在Android中並不是這樣。