我处于一种情况,我使用for循环下载一组图像,我将其转换为位图图像。所以为了避免OutOfMemory错误,我试图回收位图。但不幸的是,我遇到了另一个例外"View trying to use a recycled bitmap"
。
但我仍然允许使用bitmap=null
使用过的位图为空。所以我的问题是,我的位图null
会帮助我释放已用过的内存吗?或者我应该在代码的其他部分提供bitmap.recycle()
吗?
答案 0 :(得分:8)
没有保证强制垃圾收集的方法,只能使用System.gc()
建议垃圾收集。由于位图像素数据位于dalvik堆之外的本机内存中,因此提供本机函数(在本例中为recycle()
)将使我们有机会清除(最终)此像素数据。请注意,使用recycle()
时,您可以使用该位图做更多的事情。
您遇到的问题是您在位图上调用recycle()
,您仍在尝试使用该位图。
要回答你的问题,是的,在你回收它之后将位图设置为null是一个好主意,但它也可能是多余的。完成后,请务必尝试回收位图。
答案 1 :(得分:7)
调用recycle()
表示系统已完成使用该资源,系统现在可以释放它正在使用的非托管内存。一旦以这种方式处理了资源,它的行为通常是未定义的(人们会合理地预期它不再起作用)。
之后将引用设置为null有两个好处:
答案 2 :(得分:-3)
只需在onStop方法上调用bitmap.recycle().............你将解决问题..