如果设置myBitmap = null而没有recycle(),那么与recycle()有什么区别

时间:2013-06-28 22:13:01

标签: android bitmap

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

myBitmap.recycle();
myBitmap = null;

如果我只使用:

myBitmap = null;

有什么区别?

感谢。

1 个答案:

答案 0 :(得分:8)

根据文件:

public void recycle()
  

释放与此位图关联的本机对象,然后清除   参考像素数据。这不会释放像素数据   同步; 它只是允许它被垃圾收集,如果有的话   没有其他参考。位图标记为“死”,意思是它   如果调用getPixels()或setPixels(),则会抛出异常   什么都不会。这个操作无法逆转,所以应该如此   只有在你确定没有进一步的用途时才被调用   位图。这是一个高级调用,通常不需要调用,   因为正常的GC过程会在没有时释放这个内存   更多对此位图的引用。

基本上,

myBitmap = null;

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

然而,

myBitmap.recycle();
myBitmap = null;

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