关于Canvas: trying to use a recycled bitmap android.graphics的疑惑 本帖最后由 summersrest 于 2014-07-04 10:16:37 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有显示相同的图片的情况么(图片url 是一样的。)? 比如 你被摧毁的图片在当前item上使用, 这样就会导致图片被recycle 而你的控件正在使用这个图片绘制。 如果有相同的url 你要控制图片的引用计数 只有为0 你才能回收。 按照我的想法,应该是重新创建一个bitmap,然后再压入map中,不是这样的吗? Bitmap bitmap = ImageLoader.loadBitmap(relative, list.get(arg1), new ImageCallBack() {@Overridepublic void imageLoad(RelativeLayout relative, Bitmap bitmap) {// TODO Auto-generated method stubrelative.setBackgroundDrawable(new BitmapDrawable(bitmap));}});if (bitmap == null) {relative.setBackgroundDrawable(new BitmapDrawable(bt));} else {relative.setBackgroundDrawable(new BitmapDrawable(bitmap));}// 将bitmap加载到map中,方便用过之后回收掉cacheBit.put(arg1, new SoftReference<Bitmap>(bitmap));/这里 你有可能将bitmap=null 缓存进cache中。//初始化时候 你的 bitmap 必然 为null ,但是你依然将这个null 写入缓存 根据代码看,你应该是使用ImageLoader 这个第三方的工具,基本上比较完善的工具都会提供图片缓存机制,并有比较完善的淘汰算法。当你的item摧毁时候,你recyle bitmap,但是对于imageLoader 它不知这个图片recycle了,就有可能同样的url 他返回的还是这个recycled 的图片。你检查下。 你说的非常对,厉害啊,你这么以提示我真的发现问题了,果然是我考虑的不周全的问题,bitmap做过两次缓存,在adapter中一次,在imageLoader 里面也缓存过一次,adapter中的代码没有问题,但是adapter中回收了以后imageLoader 中并不知道已经被回收掉,根据键值判断该bitmap存在,但事实上该bitmap已被回收掉。所以报错了。知道错在哪里了,和你说的一模一样,非常感谢。希望见到过这个帖子的人别和我犯同样的错误了。 你好,我同意的也遇到了这个问题,我想请教下 imageloader 你后来是怎么处理的? 已解决 imageloader 有清除缓存的方法 怎样动态获取R.id. 怎把java代码变成android代码 app发布到google market上上传图片问题 如何计算textview 可以存放多少个字符,多少行? listview 怎么用代码设置它的width啊,好像没这个方法啊,急 监听键盘事件,并作出相应响应 如何在一个程序中安装另一个程序 google play 屏蔽我的app Android应用中图片使用的疑惑。 Android布局问题 强大的CSDN:新手--google 地图部署到android虚拟机上怎么只显示方格,MapView配置都正确,虚拟机也能上网 android底层crash问题
@Override
public void imageLoad(RelativeLayout relative, Bitmap bitmap) {
// TODO Auto-generated method stub
relative.setBackgroundDrawable(new BitmapDrawable(bitmap));
}
});
if (bitmap == null) {
relative.setBackgroundDrawable(new BitmapDrawable(bt));
} else {
relative.setBackgroundDrawable(new BitmapDrawable(bitmap));
}// 将bitmap加载到map中,方便用过之后回收掉
cacheBit.put(arg1, new SoftReference<Bitmap>(bitmap));/
这里 你有可能将bitmap=null 缓存进cache中。
//初始化时候 你的 bitmap 必然 为null ,但是你依然将这个null 写入缓存
基本上比较完善的工具都会提供图片缓存机制,并有比较完善的淘汰算法。
当你的item摧毁时候,你recyle bitmap,但是对于imageLoader 它不知这个图片recycle了,就有可能同样的url 他返回的还是这个recycled 的图片。你检查下。
你说的非常对,厉害啊,你这么以提示我真的发现问题了,果然是我考虑的不周全的问题,bitmap做过两次缓存,在adapter中一次,在imageLoader 里面也缓存过一次,adapter中的代码没有问题,但是adapter中回收了以后imageLoader 中并不知道已经被回收掉,根据键值判断该bitmap存在,但事实上该bitmap已被回收掉。所以报错了。知道错在哪里了,和你说的一模一样,非常感谢。希望见到过这个帖子的人别和我犯同样的错误了。