比较b / w bitmap.recycle()和位图= null

我在一个情况下,我已经使用for循环下载一组图像,我将它转换成位图图像。 所以为了避免OutOfMemory错误,我试图回收这个位图。 但不幸的是,我"View trying to use a recycled bitmap"了另一个exception,像"View trying to use a recycled bitmap"

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

Solutions Collecting From Web of "比较b / w bitmap.recycle()和位图= null"

调用recycle()指示系统已完成使用该资源,并且系统现在可以释放它正在使用的非托pipe内存。 一旦你以这种方式处理了一个资源,它的行为通常是不确定的(人们有理由期望它不再工作)。

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

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

没有保证的办法强制垃圾收集,只有一种方式来build议使用System.gc() 。 由于位图像素数据位于达尔维克堆之外的原生内存中,因此提供本地函数(本例中为recycle() )将使我们有机会清除(最终)该像素数据。 请注意,使用recycle() ,您可以使用该位图来做更多的事情。

你遇到的问题是,你正在调用recycle()的位图,你仍然试图使用。

要回答你的问题,是的,你已经回收后设置位图为空是个好主意,但也可能是多余的。 总是尝试回收你的位图,当你完成它们。

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