Canvas: trying to use a recycled bitmap android.graphics.Bitmap

iskyinfo0405 2012-08-31 01:41:24
在开发项目的时候 出现了Canvas: trying to use a recycled bitmap android.graphics.Bitmap一个异常。在网上看了很多资料。有的说传入图片和新的bitmap图片分辨率一样,强行改变图片的分辨率就不会出现异常了。可是问题还是解决不了。几乎都是你复制来我复制去的。后来看到一篇文章。讲述bitmap.recycle()这个是不是必须要使用的。
后来我直接把代码改成了
if (bitMap != null && !bitMap.isRecycled())
{
bitMap=null;
}

直接给他赋空了。最后就解决了。出现了这个问题的朋友可以试试这种方法。或许能够帮到你们。。。
...全文
13629 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tvvbbb 2014-10-23
  • 打赏
  • 举报
回复
这个是要分版本的,如果在3.0以前bitmap是有大部分内存都是c语言那边的,就是调用了native函数,如果是3.0以上的就变成了一个java对象,虚拟机可以管理这部分的内存,所以在2.3上如果不使用recycle去释放c用掉的那部分内存,只要次数足够多,就会出现内存溢出的问题
513339083 2014-06-13
  • 打赏
  • 举报
回复
亲测6楼思路正确,即首先解除与bitmap有关的所有绑定
lvgaga 2014-06-12
  • 打赏
  • 举报
回复
没有根本解决啊
边城_Easy 2013-10-24
  • 打赏
  • 举报
回复
第一步:先把控件的setImageDrawable(Drawable s),setbackgroudDrawable(Drawable s),用哪个设置哪个的为空setImageDrawable(null),setbackgroud(null);第二步再去recycle;因为当你recycle后不会后,控件的中的图片引用对象不会清掉需要手动清空!
wh593296781 2013-09-10
  • 打赏
  • 举报
回复
引用 4 楼 QiLiKing 的回复:
引用 2 楼 yangyanfengjiayou 的回复:
也遇到了这个异常:参照上面的方法,将代码中的bitmap.recycle()的代码注释掉,就没有出现问题了。当时有点担心会导致内存溢出现象,于是查了开发文档,上面说这个方法一般而言没有必要执行,因为当系统没有多余的内存的时候,gc可以释放内存。
recycle是必要而且必须的。他回收的是c语言代码产生的垃圾,而不是java代码产生的。可以查看源码,recycle是个native方法
感觉还是需要的 我觉得recycle应该能够加速系统对内存的回收
NPE脑残粉 2013-07-19
  • 打赏
  • 举报
回复
引用 2 楼 yangyanfengjiayou 的回复:
也遇到了这个异常:参照上面的方法,将代码中的bitmap.recycle()的代码注释掉,就没有出现问题了。当时有点担心会导致内存溢出现象,于是查了开发文档,上面说这个方法一般而言没有必要执行,因为当系统没有多余的内存的时候,gc可以释放内存。
recycle是必要而且必须的。他回收的是c语言代码产生的垃圾,而不是java代码产生的。可以查看源码,recycle是个native方法
lichao_1987 2013-06-25
  • 打赏
  • 举报
回复
没有解决这种问题
yangyanfengjiayou 2013-04-19
  • 打赏
  • 举报
回复
也遇到了这个异常:参照上面的方法,将代码中的bitmap.recycle()的代码注释掉,就没有出现问题了。当时有点担心会导致内存溢出现象,于是查了开发文档,上面说这个方法一般而言没有必要执行,因为当系统没有多余的内存的时候,gc可以释放内存。
傻熙Ta爸 2013-03-18
  • 打赏
  • 举报
回复
今天特地试了一下,好像是不起作用的,内存没有回收

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧