【发布时间】:2013-06-28 22:13:01
【问题描述】:
我看到这两行总是在一起的:
myBitmap.recycle();
myBitmap = null;
如果我只使用:
myBitmap = null;
有什么区别?
谢谢。
【问题讨论】:
我看到这两行总是在一起的:
myBitmap.recycle();
myBitmap = null;
如果我只使用:
myBitmap = null;
有什么区别?
谢谢。
【问题讨论】:
根据文档:
public void recycle()
释放与该位图关联的原生对象,并清除 参考像素数据。这不会释放像素数据 同步; 它只是允许它被垃圾收集,如果有 没有其他参考。位图被标记为“死”,这意味着它 如果调用 getPixels() 或 setPixels() 将抛出异常,并且 什么都不会画。此操作不可逆转,因此应 只有在您确定没有其他用途的情况下才会调用 位图。这是一个高级调用,通常不需要调用, 因为正常的 GC 进程会在没有 对此位图的更多引用。
所以基本上,
myBitmap = null;
删除对其指向的位图的特定引用。如果它是唯一的引用,则该位图将由垃圾收集器清理。
然而,
myBitmap.recycle();
myBitmap = null;
删除对该位图像素数据的隐藏引用。然后它会删除您对位图的特定引用。所以两者都将被垃圾收集。除非你有一个巨大的位图,或者由于某种原因内存有限,否则你可能不需要担心调用 myBitmap.recycle()。
【讨论】: