当前位置:编程学习 > JAVA >>

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

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

     bitMap=null;
}     

直接给他赋空了。最后就解决了。出现了这个问题的朋友可以试试这种方法。或许能够帮到你们。。。 --------------------编程问答-------------------- 今天特地试了一下,好像是不起作用的,内存没有回收 --------------------编程问答-------------------- 也遇到了这个异常:参照上面的方法,将代码中的bitmap.recycle()的代码注释掉,就没有出现问题了。当时有点担心会导致内存溢出现象,于是查了开发文档,上面说这个方法一般而言没有必要执行,因为当系统没有多余的内存的时候,gc可以释放内存。 --------------------编程问答-------------------- 没有解决这种问题 --------------------编程问答--------------------
引用 2 楼 yangyanfengjiayou 的回复:
也遇到了这个异常:参照上面的方法,将代码中的bitmap.recycle()的代码注释掉,就没有出现问题了。当时有点担心会导致内存溢出现象,于是查了开发文档,上面说这个方法一般而言没有必要执行,因为当系统没有多余的内存的时候,gc可以释放内存。
                            recycle是必要而且必须的。他回收的是c语言代码产生的垃圾,而不是java代码产生的。可以查看源码,recycle是个native方法 --------------------编程问答--------------------
引用 4 楼 QiLiKing 的回复:
Quote: 引用 2 楼 yangyanfengjiayou 的回复:

也遇到了这个异常:参照上面的方法,将代码中的bitmap.recycle()的代码注释掉,就没有出现问题了。当时有点担心会导致内存溢出现象,于是查了开发文档,上面说这个方法一般而言没有必要执行,因为当系统没有多余的内存的时候,gc可以释放内存。
                            recycle是必要而且必须的。他回收的是c语言代码产生的垃圾,而不是java代码产生的。可以查看源码,recycle是个native方法


感觉还是需要的 我觉得recycle应该能够加速系统对内存的回收 --------------------编程问答-------------------- 第一步:先把控件的setImageDrawable(Drawable s),setbackgroudDrawable(Drawable s),用哪个设置哪个的为空setImageDrawable(null),setbackgroud(null);第二步再去recycle;因为当你recycle后不会后,控件的中的图片引用对象不会清掉需要手动清空!
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,