BUG1-Cannot obtain size for recycled Bitmap

1.需求背景:

        拍照成功后,用glide将图片通过bitmap进行展示,之后点击保存按钮的时候会把图片上传到后端

 //glide版本:'com.github.bumptech.glide:glide:4.8.0'该版本load支持直接传入bitmap
 Glide.with(this).load(bitmap).into(mIvGlide);

2.BUG复现步骤:

        点击保存按钮后,app闪退,并提示如下错入:

 

  Caused by: java.lang.IllegalStateException: Cannot obtain size for recycled Bitmap: android.graphics.Bitmap@fb72974[1411x720] ARGB_8888
        at com.bumptech.glide.util.Util.getBitmapByteSize(Util.java:78)
        at com.bumptech.glide.load.resource.bitmap.UnitBitmapDecoder$NonOwnedBitmapResource.getSize(UnitBitmapDecoder.java:49)
        at com.bumptech.glide.load.resource.bitmap.LazyBitmapDrawableResource.getSize(LazyBitmapDrawableResource.java:79)
        at com.bumptech.glide.load.engine.EngineResource.getSize(EngineResource.java:60)
        at com.bumptech.glide.load.engine.cache.LruResourceCache.getSize(LruResourceCache.java:42)
      ......

3.定位原因:

        通过报错日志可以发现,是因为bitmap已经被回收,当我门关闭页面时,glide也会回收该bitmap,因为他此前已经被回收,所以glide在使用bitmap进行操作时闪退。

      解读过报错日志,去项目中查找代码,发现bitmap做成了一个全局变量,当点击保存按钮时,对bitmap进行了一系列操作,最终回收了bitmap,这就 导致了,当页面关闭时,glide已经无法使用传进来的bitmap,最终导致报错。

4.解决方案:

 //根据单一职责原则,将bitmap复制一份,只用来做展示操作
 
 Bitmap bitmap = new ClipBitmapUtils().getBitmap(this,R.drawable.ic);

 //复制一份bitmap,避免加载bitmap后,bitmap被回收
 Bitmap bitmap2 = Bitmap.createBitmap(bitmap);

 Glide.with(this).load(bitmap2).into(view);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值