5

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

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

有什么建议吗?

4

1 回答 1

11

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

于 2010-12-03T17:34:18.340 回答