Android中的Bitmap
内存问题导致我实现了一个自定义加载器和下载器类,它将从Web下载图像,存储本地副本,以及如果从本地副本请求创建Bitmap
。我在SoftReference<T>
列表保持这些使他们保持一会儿,然后垃圾回收,此时类的finalize()
方法被称为:从终结器调用位图#recycle()会导致Android应用程序无提示终止
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进行测试。
非常感谢,但苦涩的经历表明事实并非如此。我花了很长时间在另一个应用程序中追踪内存泄漏,这些应用程序可追踪到未循环的'Bitmap',我认为在我停止引用它们时会收集垃圾。 –