java.lang.IllegalArgumentException: bitmap is recycled

本文分析了在Android开发中因Bitmap实例被多个引用共享并提前回收而导致的java.lang.IllegalArgumentException异常。深入探讨了Bitmap.recycle()函数的使用误区,并提供了解决方案,确保在所有引用不再需要Bitmap时才进行回收。
java.lang.IllegalArgumentException: bitmap is recycled

报错分析
分析代码发现多个引用指向了同一个bitmap实例,其实一个引用调用Bitmap.recycle()函数的时候就会回收Bitmap,这就导致其他的引用指向的是一个被回收的实例,此时用其他引用调用Bitmap里面的函数都会失败。解决方法
检测到所有的引用都不再需要这个Bitmap的时候再recycle

FATAL EXCEPTION: main Process: com.mercusys.halo, PID: 31585 java.lang.IllegalArgumentException: width and height must be > 0 at android.graphics.Bitmap.createBitmap(Bitmap.java:1209) at android.graphics.Bitmap.createBitmap(Bitmap.java:1175) at android.graphics.Bitmap.createBitmap(Bitmap.java:1123) at android.graphics.Bitmap.createBitmap(Bitmap.java:1082) at com.tplink.mercusys.component.onboarding.view.EarthAnimationViewDelegate.initLine(EarthAnimationViewDelegate.kt:102) at com.tplink.mercusys.component.onboarding.view.EarthAnimationViewDelegate.access$initLine(EarthAnimationViewDelegate.kt:23) at com.tplink.mercusys.component.onboarding.view.EarthAnimationViewDelegate$initEarth$$inlined$addListener$default$1.onAnimationEnd(Animator.kt:141) at android.animation.Animator$AnimatorListener.onAnimationEnd(Animator.java:719) at android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda1.call(Unknown Source:4) at android.animation.Animator.callOnList(Animator.java:677) at android.animation.Animator.notifyListeners(Animator.java:616) at android.animation.Animator.notifyEndListeners(Animator.java:641) at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1306) at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1585) at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:328) at android.animation.AnimationHandler.-$$Nest$mdoAnimationFrame(Unknown Source:0) at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:86) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1542) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1553) at android.view.Choreographer.doCallbacks(Choreographer.java:1109) at android.view.Choreographer.doFrame(Choreographer.java:984) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1527) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:257) at android.os.Looper.loop(Looper.java:368) at android.app.ActivityThread.main(ActivityThread.java:8839) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:572) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
05-11
Process: com.coolapk.market, PID: 32737 java.lang.IllegalArgumentException: cannot use a recycled source in createBitmap at android.graphics.Bitmap.createBitmap(Bitmap.java:988) at Ϝ.Ԫ.Ԩ(IMGView.kt:30) at Ϝ.Ԫ.Ϳ(IMGView.kt:1) at me.minetsh.imaging.view.IMGView.ޖ(IMGView.kt:165) at com.coolapk.market.view.photo.edit.PhotoEditViewModel.ԭ(PhotoEditViewModel.kt:28) at com.coolapk.market.view.photo.edit.PhotoEditActivity.ࢨ(PhotoEditActivity.kt:79) at com.coolapk.market.view.photo.edit.PhotoEditActivity.ࢎ(PhotoEditActivity.kt:1) at com.coolapk.market.view.photo.edit.ԫ.invoke(R8$$SyntheticClass:5) at com.coolapk.market.view.photo.edit.PhotoEditActivity$ԩ.onChanged(PhotoEditActivity.kt:3) at androidx.lifecycle.LiveData.considerNotify(LiveData.java:30) at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:45) at androidx.lifecycle.LiveData.setValue(LiveData.java:16) at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:1) at com.coolapk.market.view.photo.edit.PhotoEditViewModel.ׯ(PhotoEditViewModel.kt:24) at com.coolapk.market.view.photo.edit.PhotoEditCropViewPart.onClick(PhotoEditCropViewPart.kt:53) at com.coolapk.market.util.ˠ.Ϳ(ViewUtil.java:19) at com.coolapk.market.util.ݳ.onClick(R8$$SyntheticClass:3) at android.view.View.performClick(View.java:8177) at android.view.View.performClickInternal(View.java:8143) at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0) at android.view.View$PerformClick.run(View.java:32298) at android.os.Handler.handleCallback(Handler.java:1027) at android.os.Handler.dispatchMessage(Handler.java:108) at android.os.Looper.loopOnce(Looper.java:298) at android.os.Looper.loop(Looper.java:408) at android.app.ActivityThread.main(ActivityThread.java:9952) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:613) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1074) 解释
08-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值