0

我得到了一个OOM。我知道以前的问题已经涵盖了很多,但我的问题通常与 Android 和 Java 的内部有关。

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

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

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

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

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

我该如何解决这个问题?那么使用 SoftReferences 真的有什么好处吗?我没有正确理解某些东西吗?

谢谢!

4

2 回答 2

0

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

于 2013-01-29T16:29:25.393 回答
0

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

于 2011-04-27T18:52:06.997 回答