Java Android资源类内存使用率

Java Android资源类内存使用率,java,android,memory-management,heap,Java,Android,Memory Management,Heap,我正在修改Android 4.0启动器,并且遇到了很多OutOfMemory错误。自从4.0.3更新以来,情况变得更糟了(或者说开始了,似乎还没好,但我从来没有进行过正确的测试),我尝试了很多方法来修复它。错误也存在于未经我修改的stock launcher中 我在Eclipse内存分析器中查看了heap hprof,发现SystemResources类占用了50%的内存。几乎所有的都是位图,包括一些1mb 512x512px的位图。因为我的手机是400x800,我不明白为什么它会有这样的分辨率

我正在修改Android 4.0启动器,并且遇到了很多OutOfMemory错误。自从4.0.3更新以来,情况变得更糟了(或者说开始了,似乎还没好,但我从来没有进行过正确的测试),我尝试了很多方法来修复它。错误也存在于未经我修改的stock launcher中

我在Eclipse内存分析器中查看了heap hprof,发现SystemResources类占用了50%的内存。几乎所有的都是位图,包括一些1mb 512x512px的位图。因为我的手机是400x800,我不明白为什么它会有这样的分辨率的资源。还有800多张其他位图,但尺寸更合理

该应用程序不包含800个资源,因此这些资源是否可能来自其他软件包?我知道该应用程序确实会从其他应用程序加载图标和小部件预览,但这还不到800个,即使它是它们的一部分,为什么它仍然保存在内存中


如果需要,我已经将hprof文件上载到了。

Android的位图类中有一个“功能”,可以将位图保留在VM堆大小之外,这反过来意味着位图的空间更小

解决与位图相关的OutOfMemory异常的唯一方法是,您必须使用
Bitmap.Recycle()释放资源使用完此位图后。并使用
Runtime.gc()
刷新垃圾收集器


我个人的观点是,这很糟糕,位图也应该包含在你的应用程序的VM堆大小中,但在Android中情况并非如此。

Android的位图类中有一个“功能”,它将位图保留在你的VM堆大小之外,这反过来意味着你有更少的空间来放置位图

解决与位图相关的OutOfMemory异常的唯一方法是,您必须使用
Bitmap.Recycle()释放资源使用完此位图后。并使用
Runtime.gc()
刷新垃圾收集器


我个人的看法是,这很糟糕,位图也应该包含在你的应用程序的VM堆大小中,但在Android中情况并非如此。

事实证明,这在CyanogenMod中是个问题。现在已经修好了。

原来是氰莫德的问题。现在已经修好了