【发布时间】:2011-12-20 11:09:05
【问题描述】:
我的应用可以加载相当大的图像。为了节省内存,我尝试使用一个临时位图来加载,另一个用于转换后的最终图像:
.....
finalBitmap.recycle();
finalBitmap = null;
Bitmap tempBitmap = BitmapFactory.decodeStream(fin, ...);
finalBitmap = Bitmap.createBitmap(tempBitmap, ....);
imgview.setImageBitmap(finalBitmap);
.....
现在,我们已经完成了 tempBitmap,它只需要将解码的 Bitmap 传输到 createBitmap 中的转换步骤。所以:
.....
tempBitmap.recycle();
tempBitmap = null;
.....
并且...它崩溃并出现“尝试使用回收的位图”错误,特别是由于 tempBitmap 的回收。 tempBitmap 未显示,仅在那里使用。
这里出了什么问题?我是否应该始终使用“finalBitmap”并依靠 createBitmap 来管理它(finalBitmap = Bitmap.createBitmap (finalBitmap ,....))?我看不出对 tempBitmap 的持续依赖会导致这样的失败。
编辑: 是的,空赋值似乎会导致适当的最终垃圾回收,但我对为什么临时位图上的 recycle() 感到困惑在这种情况下问题很大。我的印象是 createBitmap() 持有对它的引用,但为什么,以及持续多长时间?
【问题讨论】:
标签: android memory-management bitmap recycle