关于createScaledBitmap的Android OutOfMemoryException和SoftReferences的作用?

时间:2011-04-27 18:23:34

标签: android out-of-memory drawable soft-references

我有一个OOM。我知道它已经被以前的问题所覆盖,但是我的内容与Android和Java的内部结构有关。

当我在随机点加载图像时,我得到了这个可怕的OOM异常。

我确实在HashMap中有我的图像>。从SoftReferences定义中,如果内存不足,我希望Drawables是GC。

相比之下,从我之前的研究中我看到drawable中的位图分配在与我的应用程序堆不同的堆(本机堆)中。这解释了为什么在DDMS上尽管我看到我正在使用的6MB内存,但我的应用程序仍然崩溃。

似乎SoftReferences对于缓存来说是“完美的”,并且是Android工程师推荐使用的。

我的问题是,由于我的应用程序堆永远不会达到MAX点,这应该意味着我的SoftReferences永远不会GC。

如何解决此问题?那么使用SoftReferences真的有什么好处吗?我不正确地理解某事吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我有同样的问题,我使用SoftReference HashMap,但我仍然收到OOM错误。我能够摆脱它的唯一方法是不使用大图像,因为BitmapFactory.decodeStream需要大量内存来解码图像。

答案 1 :(得分:0)

您是否尝试过使用recycle()方法?这会将您的位图设置为无用,因此垃圾收集器可以完成其工作。