【问题标题】:If set myBitmap = null without recycle(), what difference between with recycle() [duplicate]如果设置 myBitmap = null 而没有 recycle(),与 recycle() 有什么区别 [重复]
【发布时间】:2013-06-28 22:13:01
【问题描述】:

我看到这两行总是在一起的:

myBitmap.recycle();
myBitmap = null;

如果我只使用:

myBitmap = null;

有什么区别?

谢谢。

【问题讨论】:

标签: android bitmap


【解决方案1】:

根据文档:

public void recycle()

释放与该位图关联的原生对象,并清除 参考像素数据。这不会释放像素数据 同步; 它只是允许它被垃圾收集,如果有 没有其他参考。位图被标记为“死”,这意味着它 如果调用 getPixels() 或 setPixels() 将抛出异常,并且 什么都不会画。此操作不可逆转,因此应 只有在您确定没有其他用途的情况下才会调用 位图。这是一个高级调用,通常不需要调用, 因为正常的 GC 进程会在没有 对此位图的更多引用。

所以基本上,

myBitmap = null;

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

然而,

myBitmap.recycle();
myBitmap = null;

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

【讨论】:

    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2016-12-23
    • 2012-10-03
    • 2013-11-13
    • 2017-03-27
    相关资源
    最近更新 更多