2011-12-21 37 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中并不是这样。