我是否需要回收BitmapDrawable

时间:2013-04-19 15:24:33

标签: android

根据http://developer.android.com/training/displaying-bitmaps/manage-memory.html

  

在Android 2.3.3(API级别10)及更低版本上,使用recycle()是   推荐的。如果您正在显示大量的位图数据   应用程序,您可能会遇到OutOfMemoryError错误。回收()   方法允许应用程序尽快回收内存。

我想知道,对于BitmapDrawable,我是否需要执行像

这样的清理工作

bitmapDrawable.getBitmap().recycle()

如果不再需要它?

2 个答案:

答案 0 :(得分:2)

The documentation告诉你

  

这是一个高级调用,通常不需要调用,因为   正常的GC过程将在没有更多时释放这个内存   对此位图的引用。

所以我会选择:不,你不需要打电话。但是,通过清除您的参考资料,释放您的位图资源。

您添加的链接几乎告诉您为什么它可能在之前和之后有所帮助:

  

在Android 2.3.3(API级别10)及更低版本上,支持像素数据   位图存储在本机内存中。它与位图分开   本身,存储在Dalvik堆中。本机中的像素数据   内存不会以可预测的方式释放,可能导致内存   应用程序短暂超出其内存限制和崩溃。作为   Android 3.0(API Level 11),像素数据存储在Dalvik上   堆以及相关的位图。

答案 1 :(得分:1)

最好在不使用时回收位图。您可以在onResume()中加载bimaps并在onPause()中回收它们。

因此,为了减少内存消耗并避免内存泄漏,最好在不使用时回收位图。

另请参阅链接

中的内存管理讲座

http://www.youtube.com/watch?v=_CruQY55HOk

编辑:

您发布的链接的引号。 (您可以在Android 2.3.3及更低版本的管理内存标题下查看

在Android 2.3.3(API级别10)及更低版本上,建议使用recycle()

从HoneyComB开始,位图存储在HEAP而不是它们的本机位图堆中。

Android 3.0(API Level 11)引入了BitmapFactory.Options.inBitmap字段。如果设置了此选项,则采用Options对象的解码方法将在加载内容时尝试重用现有位图。这意味着重用了位图的内存,从而提高了性能,并删除了内存分配和取消分配

http://developer.android.com/training/displaying-bitmaps/manage-memory.html