我正在修改Android 4.0启动器,我遇到了很多OutOfMemoryErrors。自4.0.3更新以来它变得更糟(或者开始,它似乎在它之前很好,但我从来没有正确测试),我已经尝试了很多东西来解决它。没有我的修改,错误也在库存启动器中。
我查看了Eclipse Memory Analyzer中的堆hprof,发现系统Resources类占用了50%的内存。几乎所有这些都是Bitmaps,包括1mb 512x512px的一些位图。由于我的手机是400x800,我不明白为什么它会有这个分辨率的资源。然后还有超过800个其他位图,但这些是更合理的尺寸。
该应用程序不包含800个资源,因此这些资源可能来自其他软件包吗?我知道该应用程序确实加载了来自其他应用程序的图标和小部件预览,但仍然不高达800,即使它是它们的一部分,为什么它仍然保留在内存中?
如果需要,我已将hprof文件上传到http://176.31.247.124/nebkat/heap.hprof。
答案 0 :(得分:0)
Android的Bitmap类中有一个'功能'可以使Bitmaps远离VM堆大小,这反过来意味着你的Bitmaps空间更小。
解决与位图相关的OutOfMemory异常的唯一方法是,在使用完此Bitmap后,您必须使用Bitmap.Recycle();
释放资源。并使用Runtime.gc()
刷新垃圾收集器。
我个人认为这很糟糕,并且Bitmaps也应该包含在你的应用程序的VM堆大小中,但在Android中却不是这样。
答案 1 :(得分:0)
原来这是CyanogenMod的一个问题。现在已经修好了。