我得到了一个OOM。我知道以前的问题已经涵盖了很多,但我的问题通常与 Android 和 Java 的内部有关。
当我在随机点加载图像时,我得到了这个可怕的 OOM 异常。
我确实在 HashMap> 中有我的图像。从 SoftReferences 定义中,如果内存不足,我希望 Drawables 被 GC 处理。
相比之下,从我之前的研究中,我发现可绘制对象中的位图分配在与我的应用程序堆不同的堆(本机堆)中。这就解释了为什么在 DDMS 上,尽管我看到我正在使用 6MB 的内存,但我的应用程序仍然崩溃。
似乎 SoftReferences 对于缓存来说是“完美的”,并且被 Android 工程师推荐使用。
我的问题是,由于我的应用程序堆从未达到 MAX 点,这应该意味着我的 SoftReferences 永远不会被 GC 处理。
我该如何解决这个问题?那么使用 SoftReferences 真的有什么好处吗?我没有正确理解某些东西吗?
谢谢!