bumptech / bumptech/glide

java.lang.IllegalStateException: Cannot obtain size for recycled Bitmap: android.graphics.Bitmap@7eb4781[284x284] ARGB_8888

Open
#4,580 2 comments 0 reactions 0 assignees View on GitHub
stale
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.