2

图像回收在 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()

我得到与上面相同的结果。我认为调用回收会清除位图,因此它会记录为空?

另外,如果我有一个像这样采用位图的方法:

public void doStuff(Bitmap pic){

//Code here

}

如上所述创建我的位图并将其发送到 doStuff:

myBitmap = BitmapFactory.decodeResource(curView.getResources(), R.drawable.mypic);
doStuff(myBitmap);

如果我想回收图像,是否需要调用 myBitmap.recycle(); 以及 pic.recycle (在我完成后的 doStuff 方法中)。?

4

2 回答 2

1

Bitmap对象包含图像数据(在后台分配的像素值),它本身不是图像数据。因此,Bitmap对象可以在 之后徘徊recycle(),但是当您尝试使用数据时会抛出错误。

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

于 2013-03-04T15:04:48.657 回答
1

扩展 User117 的评论:

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

2)如果您将 Bi​​tmap 传递给仅传递对位图的引用的 doStuff 方法,则无需调用 recycle 两次,因为对象是相同的。如果您不再需要它,只需在调用 doStuff 后调用 myBitmap 上的回收。

于 2013-03-04T15:05:52.857 回答