8

我看到两条线总是在一起:

myBitmap.recycle();
myBitmap = null;

如果我只使用:

myBitmap = null;

有什么区别?

谢谢。

4

1 回答 1

8

根据文档:

public void recycle()

释放与此位图关联的本机对象,并清除对像素数据的引用。这不会同步释放像素数据;如果没有其他引用,它只是允许它被垃圾收集。该位图被标记为“死”,这意味着如果调用 getPixels() 或 setPixels() 将引发异常,并且不会绘制任何内容。此操作无法反转,因此只有在您确定位图没有进一步用途时才应调用它。这是一个高级调用,通常不需要调用,因为当没有更多对该位图的引用时,正常的 GC 进程将释放此内存。

所以基本上,

myBitmap = null;

删除对它指向的位图的特定引用。如果它是唯一的引用,则该位图将由垃圾收集器清理。

然而,

myBitmap.recycle();
myBitmap = null;

删除对该位图像素数据的隐藏引用。然后它会删除您对位图的特定引用。所以两者都将被垃圾收集。除非您有一个巨大的位图,或者由于某种原因内存有限,否则您可能不需要担心调用 myBitmap.recycle()。

于 2013-06-28T22:37:59.810 回答