Android 中的Bitmap
内存问题导致我实现了一个自定义加载器和下载器类,该类将从网络下载图像,存储本地副本,并Bitmap
在请求时从本地副本创建一个。我将它们保存在一个列表中,SoftReference<T>
以便它们保存一段时间,然后进行垃圾收集,此时finalize()
调用该类的方法:
protected void finalize() throws Throwable {
Log.w("IMAGEPACK", "Finalizing " + mBitmap);
if(mBitmap!=null&&!mBitmap.isRecycled()) mBitmap.recycle();
super.finalize();
}
查看 LogCat,我确定这段代码发生在崩溃之前。我还单步执行了代码,它在这条线上失败了。
我以前有一个使用同步引用计数的解决方案,它看起来非常可靠,但是在我想避免这种情况之前,手动编写的引用计数遇到了很大的问题。我可能不得不恢复它,但我想知道为什么位图回收在这里失败。
我目前正在 2.3.3 上测试三星 Galaxy S。