Android中图像回收的确切运作方式?
请允许我详细说明:
如果我有以下内容:
myBitmap = BitmapFactory.decodeResource(curView.getResources(), R.drawable.mypic);
并记录以下内容
Log.v("ImageStuff","Image is: "+myBitmap);
我得到以下结果:
Image is: android.graphics.Bitmap@(ResourceID here)
哪个好,但是如果我做同样的事情,但是像这样召唤回收
myBitmap = BitmapFactory.decodeResource(curView.getResources(), R.drawable.mypic);
myBitmap.recycle()
我得到与上面相同的结果。我认为调用recycle会清除位图,所以它会记录为null吗?
另外,如果我有一个像这样的位图的方法:
public void doStuff(Bitmap pic){
//Code here
}
如上所述创建我的位图并将其发送到doStuff:
myBitmap = BitmapFactory.decodeResource(curView.getResources(), R.drawable.mypic);
doStuff(myBitmap);
如果我想回收图片,我是否需要调用myBitmap.recycle();以及pic.recycle(在我完成之后在我的doStuff方法中)。?
答案 0 :(得分:1)
Bitmap
对象包含图像数据(在引擎盖下分配的像素值),它本身不是图像数据。因此,Bitmap
对象可以在recycle()
之后挂起,但在尝试使用数据时会抛出错误。
当您或任何其他对象不再以任何方式使用Bitmap时,您调用recycle()
。您还可以设置myBitmap = null
以使对象本身被垃圾收集。
答案 1 :(得分:1)
扩展User117的评论:
1)Bitmap只是图像数据的容器。当您调用recycle时,它会删除所有图像数据,但仍会保留容器。
2)如果将Bitmap传递给刚刚传递对位图的引用的doStuff方法,则不需要调用recycle两次,因为对象是相同的。如果您不再需要,请在调用doStuff后调用myBitmap上的recycle。