Picasso使用时,ImageView做ListView的Item出现异常Canvas: trying to use a recycled bitmap

经过是这样的: 我在activityA显示了一个listview使用imageView作为item,图片是从网络获取,我这里直接用的是网络框架Picasso,它内部自带缓存机制,而点击listView的Item会跳到activityB,并使用被点击的图片的url.重新获取图片显示到activityB上面:在activityA上面我的调用时这样的:

Picasso.with(context).load(mUrl).into(imageViewA);

而在activityB中我尝试使用Target(注意!问题就在这里!),监听图片加载接口来实现设置imageView:

Picasso.with(mContext).load(mUrl).into(new Target() {
    //图片加载成功
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        imageViewB.setImageBitmap(bitmap);

    }
    );

当我运行的时候,点击某个条目跳转到activityB,当我返回到activityA,并上下滑动,当显示到刚才被点击的那个条目时就出现了异常:

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

当时那可真是一脸懵逼啊,于是各种搜索,各种查找,最终让我找到了原因:

在activityA中我使用url给item设置图片时,bitmap对象会存到Picasso的缓存机制中,在activityB中我使用相同的url加载图片时,在target的回调onBitmapLoaded方法中拿到的bitmap就是activityA中Picasso缓存过的bitmap,当我finish()了activityB,这时对应的bitmap就被回收掉了. 重新回到activityA时,Picasso并不知道这个缓存的bitmap被回收了,还是直接设置给了ListView的item,此时就会报这个异常.
所以在activityB中我也就不用target 了,继续使用Picasso.with(context).load(mUrl).into(imageViewB);问题就得到了解决;
参考文章:
1.http://stackoverflow.com/questions/28151017/runtimeexception-canvas-trying-to-use-a-recycled-bitmap-android-graphics-bitma
2.http://bbs.csdn.net/topics/390826811

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值