java.lang.IllegalStateException: Cannot obtain size for recycled Bitmap: android.graphics.Bitmap@7eb4781[284x284] ARGB_8888
- Dominant language
- Java
- Stars
- 35k
- Forks
- 6.2k
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 8
Description
Android 8.1 Glide:4.11.0 okhttp:3.3.1
equipment:RK3399
java.lang.RuntimeException: Unable to destroy activity{com.jdh.showroomv2/com.xx.xx.v2ui.activity.AllCheckResultContainerActivity}: java.lang.IllegalStateException: Cannot obtain size for recycled Bitmap: android.graphics.Bitmap@7eb4781[284x284] ARGB_8888 at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4383) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4401) at android.app.ActivityThread.-wrap5(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.IllegalStateException: Cannot obtain size for recycled Bitmap: android.graphics.Bitmap@7eb4781[284x284] ARGB_8888 at com.bumptech.glide.util.Util.getBitmapByteSize(Util.java:79) at com.bumptech.glide.load.resource.bitmap.UnitBitmapDecoder$NonOwnedBitmapResource.getSize(UnitBitmapDecoder.java:49) at com.bumptech.glide.load.resource.bitmap.LazyBitmapDrawableResource.getSize(LazyBitmapDrawableResource.java:76) at com.bumptech.glide.load.engine.EngineResource.getSize(EngineResource.java:62) at com.bumptech.glide.load.engine.cache.LruResourceCache.getSize(LruResourceCache.java:40) at com.bumptech.glide.load.engine.cache.LruResourceCache.getSize(LruResourceCache.java:11) at com.bumptech.glide.util.LruCache.put(LruCache.java:117) at com.bumptech.glide.load.engine.cache.LruResourceCache.put(LruResourceCache.java:11) at com.bumptech.glide.load.engine.Engine.onResourceReleased(Engine.java:396) at com.bumptech.glide.load.engine.EngineResource.release(EngineResource.java:116) at com.bumptech.glide.load.engine.Engine.release(Engine.java:362) at com.bumptech.glide.request.SingleRequest.clear(SingleRequest.java:326) at com.bumptech.glide.manager.RequestTracker.clearAndRemove(RequestTracker.java:72) at com.bumptech.glide.RequestManager.untrack(RequestManager.java:663) at com.bumptech.glide.RequestManager.untrackOrDelegate(RequestManager.java:631) at com.bumptech.glide.RequestManager.clear(RequestManager.java:627) at com.bumptech.glide.RequestManager.onDestroy(RequestManager.java:374) at com.bumptech.glide.manager.ActivityFragmentLifecycle.onDestroy(ActivityFragmentLifecycle.java:65) at com.bumptech.glide.manager.SupportRequestManagerFragment.onDestroy(SupportRequestManagerFragment.java:215) at androidx.fragment.app.Fragment.performDestroy(Fragment.java:2928) at androidx.fragment.app.FragmentStateManager.destroy(FragmentStateManager.java:492) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1308) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1368) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1446) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1509) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2637) at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:2621) at androidx.fragment.app.Fragment.performDestroy(Fragment.java:2923) at androidx.fragment.app.FragmentStateManager.destroy(FragmentStateManager.java:492) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1308) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1368) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1446) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1509) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2637) at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:2621) at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:330) at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:365) at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:242) at com.xx.xx.laoding.CommonBaseDialogActivity.onDestroy(CommonBaseDialogActivity.java:173) at com.xx.xx.v2ui.activity.AllCheckResultContainerActivity.onDestroy(AllCheckResultContainerActivity.java:459) at android.app.Activity.performDestroy(Activity.java:7245) at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1249) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4370) ... 9 more java.lang.IllegalStateException: Cannot obtain size for recycled Bitmap: android.graphics.Bitmap@7eb4781[284x284] ARGB_8888 at com.bumptech.glide.util.Util.getBitmapByteSize(Util.java:79) at com.bumptech.glide.load.resource.bitmap.UnitBitmapDecoder$NonOwnedBitmapResource.getSize(UnitBitmapDecoder.java:49) at com.bumptech.glide.load.resource.bitmap.LazyBitmapDrawableResource.getSize(LazyBitmapDrawableResource.java:76) at com.bumptech.glide.load.engine.EngineResource.getSize(EngineResource.java:62) at com.bumptech.glide.load.engine.cache.LruResourceCache.getSize(LruResourceCache.java:40) at com.bumptech.glide.load.engine.cache.LruResourceCache.getSize(LruResourceCache.java:11) at com.bumptech.glide.util.LruCache.put(LruCache.java:117) at com.bumptech.glide.load.engine.cache.LruResourceCache.put(LruResourceCache.java:11) at com.bumptech.glide.load.engine.Engine.onResourceReleased(Engine.java:396) at com.bumptech.glide.load.engine.EngineResource.release(EngineResource.java:116) at com.bumptech.glide.load.engine.Engine.release(Engine.java:362) at com.bumptech.glide.request.SingleRequest.clear(SingleRequest.java:326) at com.bumptech.glide.manager.RequestTracker.clearAndRemove(RequestTracker.java:72) at com.bumptech.glide.RequestManager.untrack(RequestManager.java:663) at com.bumptech.glide.RequestManager.untrackOrDelegate(RequestManager.java:631) at com.bumptech.glide.RequestManager.clear(RequestManager.java:627) at com.bumptech.glide.RequestManager.onDestroy(RequestManager.java:374) at com.bumptech.glide.manager.ActivityFragmentLifecycle.onDestroy(ActivityFragmentLifecycle.java:65) at com.bumptech.glide.manager.SupportRequestManagerFragment.onDestroy(SupportRequestManagerFragment.java:215) at androidx.fragment.app.Fragment.performDestroy(Fragment.java:2928) at androidx.fragment.app.FragmentStateManager.destroy(FragmentStateManager.java:492) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1308) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1368) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1446) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1509) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2637) at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:2621) at androidx.fragment.app.Fragment.performDestroy(Fragment.java:2923) at androidx.fragment.app.FragmentStateManager.destroy(FragmentStateManager.java:492) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1308) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1368) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1446) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1509) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2637) at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:2621) at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:330) at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:365) at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:242) at com.xx.xx.laoding.CommonBaseDialogActivity.onDestroy(CommonBaseDialogActivity.java:173) at com.xx.xx.v2ui.activity.AllCheckResultContainerActivity.onDestroy(AllCheckResultContainerActivity.java:459) at android.app.Activity.performDestroy(Activity.java:7245) at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1249) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4370) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4401) at android.app.ActivityThread.-wrap5(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Contributor guide
Research direction
Start with com.bumptech.glide.util.Util.getBitmapByteSize and trace the release path through UnitBitmapDecoder, LruResourceCache, Engine, and RequestManager.onDestroy. Reproduce the reported Activity destruction on Android 8.1 with Glide 4.11.0, then determine the bitmap-lifecycle failure and add regression coverage before confirming the crash no longer occurs.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, java
- Domain
- mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100