Diff b / w bitmap.recycle()和bitmap = null

时间:2011-06-07 05:05:03

标签: android bitmap out-of-memory

我处于一种情况,我使用for循环下载一组图像,我将其转换为位图图像。所以为了避免OutOfMemory错误,我试图回收位图。但不幸的是,我遇到了另一个例外"View trying to use a recycled bitmap"

但我仍然允许使用bitmap=null使用过的位图为空。所以我的问题是,我的位图null会帮助我释放已用过的内存吗?或者我应该在代码的其他部分提供bitmap.recycle()吗?

3 个答案:

答案 0 :(得分:8)

没有保证强制垃圾收集的方法,只能使用System.gc()建议垃圾收集。由于位图像素数据位于dalvik堆之外的本机内存中,因此提供本机函数(在本例中为recycle())将使我们有机会清除(最终)此像素数据。请注意,使用recycle()时,您可以使用该位图做更多的事情。

您遇到的问题是您在位图上调用recycle(),您仍在尝试使用该位图。

要回答你的问题,是的,在你回收它之后将位图设置为null是一个好主意,但它也可能是多余的。完成后,请务必尝试回收位图。

答案 1 :(得分:7)

调用recycle()表示系统已完成使用该资源,系统现在可以释放它正在使用的非托管内存。一旦以这种方式处理了资源,它的行为通常是未定义的(人们会合理地预期它不再起作用)。

之后将引用设置为null有两个好处:

  • 当您尝试使用它们时,您将不会对对象无效的陈旧引用
  • 垃圾收集器将知道清理位图对象的托管端,释放更多内存

答案 2 :(得分:-3)

只需在onStop方法上调用bitmap.recycle().............你将解决问题..