我的应用程序可以加载相当大的图像。在努力为内存保守,我试图用一个临时的位图加载,另一个用于改造后的最终图像:现在Android:“尝试使用回收位图”错误与临时位图
.....
finalBitmap.recycle();
finalBitmap = null;
Bitmap tempBitmap = BitmapFactory.decodeStream(fin, ...);
finalBitmap = Bitmap.createBitmap(tempBitmap, ....);
imgview.setImageBitmap(finalBitmap);
.....
,在这一点上我们与tempBitmap,这是做只需要将解码的位图传输到createBitmap中的转换步骤即可。所以:
.....
tempBitmap.recycle();
tempBitmap = null;
.....
而且...它试图使用一个回收的位图错误,具体是因为tempBitmap的回收。 tempBitmap没有显示,仅在处使用。
这里怎么回事?我应该用 “finalBitmap” 贯穿并依靠createBitmap对其进行管理(finalBitmap = Bitmap.createBitmap(finalBitmap,....))?我无法看到将会导致这样的失败的tempBitmap的持续依赖。
编辑:是的,空的分配似乎得到适当的,最终垃圾收集,但我很迷惑,为什么再循环()上的临时位图是在这种情况下,这样的问题。我得到的印象是createBitmap()持有对它的引用,但为什么以及多久?
我错过了它可能是同一个对象的一点。我将temp设置为null不会导致副作用,因为它不会真正释放对象,而recycle()直接影响它。嗯。我接受你的答案,并希望你能帮我加强我的问题(因为我认为这对于人们来说是有用的信息)。 – MartyMacGyver