Android:Bitmaps,SoftReferences和OOM?

时间:2010-12-03 16:08:25

标签: android memory-management bitmap heap soft-references

我在垂直LinearLayout中有一系列视图。滚动到时,每个视图都会生成并绘制一个位图。出于性能原因,每次调用onDraw()时我宁愿不生成Bitmap,但出于内存原因,我无法保留对Bitmaps的硬引用。我可以就我应该采取的策略提出建议。

我已经尝试过明显的路径:生成Bitmap,然后用SoftReference包装它。这失败有两个原因。 1.参考文献收集得比我预期的要热烈得多。我还是得到了OOM!这是令人震惊的,因为没有Bitmap特别大,所以单个视图不应该导致OOM,让我假设OOM发生,因为违规的SoftReference没有被释放的机会。此外,当我的应用程序的分配堆大小为6mb时(根据DDMS视图),OOM会发生,我希望它在抛出OOM之前增长到16mb。

有什么建议吗?

1 个答案:

答案 0 :(得分:11)

问题是Bitmaps使用终结器,因此,在实际释放本机内存之前可能需要几次GC传递。这是我们正在努力做得更好的事情。