首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较b/w bitmap.recycle()和bitmap=null

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

Stack Overflow用户
提问于 2011-06-07 13:05:03
回答 3查看 5.5K关注 0票数 9

在这种情况下,我使用for循环下载一组图像,并将其转换为位图图像。因此,为了避免OutOfMemory错误,我尝试回收位图。但不幸的是,我遇到了另一个异常,比如"View trying to use a recycled bitmap"

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-07 14:07:16

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

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

  • 当您尝试使用对象时,将不会有对这些对象的过时引用
  • 垃圾回收器将知道如何清理位图对象的托管端,从而释放更多内存
票数 7
EN

Stack Overflow用户

发布于 2011-06-07 13:46:47

没有确保强制垃圾收集的方法,只有一种方法可以建议使用System.gc()。由于位图像素数据位于dalvik堆之外的本机内存中,因此提供一个本机函数(在本例中为recycle())将使我们有机会(最终)清理这些像素数据。请注意,当使用recycle()时,您无法对该位图执行更多操作。

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

为了回答你的问题,是的,在回收位图后将它设置为null是一个好主意,但它也可能是多余的。使用完位图后,请始终尝试回收位图。

票数 8
EN

Stack Overflow用户

发布于 2012-02-06 14:52:13

只需在onStop方法上调用bitmap.recycle(),.............u就可以解决这个问题。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6260787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档