Android和图像回收

时间:2013-03-04 14:57:29

标签: android memory-management graphics bitmap recycle

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方法中)。?

2 个答案:

答案 0 :(得分:1)

Bitmap对象包含图像数据(在引擎盖下分配的像素值),它本身不是图像数据。因此,Bitmap对象可以在recycle()之后挂起,但在尝试使用数据时会抛出错误。

当您或任何其他对象不再以任何方式使用Bitmap时,您调用recycle()。您还可以设置myBitmap = null以使对象本身被垃圾收集。

答案 1 :(得分:1)

扩展User117的评论:

1)Bitmap只是图像数据的容器。当您调用recycle时,它会删除所有图像数据,但仍会保留容器。

2)如果将Bitmap传递给刚刚传递对位图的引用的doStuff方法,则不需要调用recycle两次,因为对象是相同的。如果您不再需要,请在调用doStuff后调用myBitmap上的recycle。