4

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

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

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

bitmapDrawable.getBitmap().recycle()

如果不再需要?

4

2 回答 2

2

文档告诉你

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

所以我会同意:不,你不需要调用它。但是,通过清除您拥有的引用来释放您的位图资源。

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

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

于 2013-04-19T15:30:02.170 回答
2

最好在不使用时回收位图。您可以在 onResume() 中加载 bimap 并在 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 级别 11)引入了 BitmapFactory.Options.inBitmap 字段。如果设置了此选项,则采用 Options 对象的解码方法将在加载内容时尝试重用现有位图。这意味着位图的内存被重用,从而提高了性能,并删除了内存分配和取消分配

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

于 2013-04-19T15:45:55.777 回答