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
Process: com.android.networkstack.process, PID: 4762 java.lang.IllegalArgumentException: Wakelock.mLock is already dead. at android.os.Parcel.createExceptionOrNull(Parcel.java:3374) at android.os.Parcel.createException(Parcel.java:3354) at android.os.Parcel.readException(Parcel.java:3337) at android.os.Parcel.readException(Parcel.java:3279) at android.os.IPowerManager$Stub$Proxy.acquireWakeLock(IPowerManager.java:1471) at android.os.PowerManager$WakeLock.acquireLocked(PowerManager.java:4194) at android.os.PowerManager$WakeLock.acquire(PowerManager.java:4175) at com.android.networkstack.android.net.ip.IpReachabilityMonitor$Dependencies$1.acquireWakeLock(IpReachabilityMonitor.java:198) at com.android.networkstack.android.net.ip.IpReachabilityMonitor.probeAll(IpReachabilityMonitor.java:572) at com.android.networkstack.android.net.ip.IpClient.handleUpdateL2Information(IpClient.java:2845) at com.android.networkstack.android.net.ip.IpClient.-$$Nest$mhandleUpdateL2Information(IpClient.java:0) at com.android.networkstack.android.net.ip.IpClient$StartedState.processMessage(IpClient.java:3388) at com.android.networkstack.com.android.internal.util.StateMachine$SmHandler.processMsg(StateMachine.java:1002) at com.android.networkstack.com.android.internal.util.StateMachine$SmHandler.handleMessage(StateMachine.java:820) at android.os.Handler.dispatchMessage(Handler.java:115) at android.os.Looper.loopOnce(Looper.java:298) at android.os.Looper.loop(Looper.java:408) at android.os.HandlerThread.run(HandlerThread.java:85) Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.power.PowerManagerService$WakeLock.linkToDeath(PowerManagerService.java:6302) at com.android.server.power.PowerManagerService$WakeLock.<init>(PowerManagerService.java:6289) at com.android.server.power.PowerManagerService.acquireWakeLockInternal(PowerManagerService.java:1890) at com.android.server.power.PowerManagerService.-$$Nest$macquireWakeLockInternal(Unknown Source:0) at com.android.server.power.PowerManagerService$BinderService.acquireWakeLock(PowerManagerService.java:6785)
最新发布
11-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值