我一直在阅读有关解码位图的性能问题并且收到OutOfMemoryError“Bitmap超出VM预算”的问题,当我希望不会内存不足并在线阅读这是一个常见的问题,称为错误许多开发者的框架。
通常情况下,我在第二次通过时会收到上述错误。假设我成功加载了一个相当大的Bitmap,然后回收它,甚至将ref设置为null。当我第二次调用同样的方法来完成将我的Bitmap加载到内存中时...崩溃。
我已经阅读过此处和其他地方以前的帖子,可以使用BitmapFactory.Options完成一些事情(例如,显式提供输入缓冲区)。但是,在盲目地使用我发现的东西之前,我希望对这些课程有更多了解的人可以更多地发光。
明确地向BitmapFactory.Options.inTempStorage提供字节数组和在编码过程中没有它的BitmapFactory会做什么有什么区别?为什么这应该对OutOfMemoryError有帮助?它是否提供比默认缓冲区更小的缓冲区,因此在内存不足之前有更多机会进行清理?
当我调用Bitmap.recycle()时会发生什么,为什么它与将Bitmap设置为null有什么不同?注意:执行其中之一或两者都不会对我是否(以及何时)出现OutOfMemory错误产生影响。
有没有时间我应该明确邀请GC加入这类问题?我一直在操作(在Java和.Net中),假设GC在大多数情况下应该被信任来决定它在何时何地发挥作用,因为对集合的影响要大于释放内存(而且我个人对他们并不熟悉这个决定)。
更新
此视频回答了我的大部分问题:
Google I / O 2011:Android应用的内存管理
答案 0 :(得分:1)
我发现这可能很有趣:http://osdir.com/ml/AndroidDevelopers/2009-08/msg01230.html。您是否尝试过System.gc()来确认它是否存在未正确清理本机堆的问题?