据我所知,在Android上,建议将Bitmap对象作为WeakReferences引用,以避免内存泄漏。当没有保留位图对象的硬引用时,垃圾收集器会自动收集它。
现在,如果我理解正确,必须始终调用Bitmap.recycle()方法才能释放位图。我认为这是因为Bitmap对象有特殊的内存管理。
这个理解正确吗?
如果是这样的话,在使用WeakReferences时,可能会出现内存泄漏,因为当释放WeakReferences时,Bitmap.recycle()从未被调用。或者说,WeakReferences足以避免内存泄漏吗?
谢谢
现在,如果我理解正确,必须始终调用Bitmap.recycle()方法才能释放位图。我认为这是因为Bitmap对象有特殊的内存管理。
这个理解正确吗?
如果是这样的话,在使用WeakReferences时,可能会出现内存泄漏,因为当释放WeakReferences时,Bitmap.recycle()从未被调用。或者说,WeakReferences足以避免内存泄漏吗?
谢谢
recycle()
是一个好主意,因为在3.0之前的Bitmaps中,GC似乎需要经过几次传递才能决定收集它们并调用它们的finalizers。如果在GC正确释放未使用的Bitmaps之前分配了太多或太大的Bitmaps,则可能会遇到OutOfMemoryErrors。但是,我对最初的问题的答案(您必须调用recycle,否则会泄漏内存)仍然是准确的,因为即使您不调用recycle,Bitmaps pre-3.0也将最终被GC回收。 - Victor