我看到两条线总是在一起:
myBitmap.recycle();
myBitmap = null;
如果我只使用:
myBitmap = null;
有什么区别?
谢谢。
根据文档:
public void recycle()
释放与此位图关联的本机对象,并清除对像素数据的引用。这不会同步释放像素数据;如果没有其他引用,它只是允许它被垃圾收集。该位图被标记为“死”,这意味着如果调用 getPixels() 或 setPixels() 将引发异常,并且不会绘制任何内容。此操作无法反转,因此只有在您确定位图没有进一步用途时才应调用它。这是一个高级调用,通常不需要调用,因为当没有更多对该位图的引用时,正常的 GC 进程将释放此内存。
所以基本上,
myBitmap = null;
删除对它指向的位图的特定引用。如果它是唯一的引用,则该位图将由垃圾收集器清理。
然而,
myBitmap.recycle();
myBitmap = null;
删除对该位图像素数据的隐藏引用。然后它会删除您对位图的特定引用。所以两者都将被垃圾收集。除非您有一个巨大的位图,或者由于某种原因内存有限,否则您可能不需要担心调用 myBitmap.recycle()。