【问题标题】:Crash on using Glide library使用 Glide 库时崩溃
【发布时间】:2020-03-19 12:12:01
【问题描述】:

使用 Glide 库将不同大小的图像加载到 ImageView 中。但不确定为什么 glide 无法处理内存消耗,回收和重用它。

分级:

api 'com.github.bumptech.glide:glide:4.3.0'

用法:

@BindingAdapter({"imageUrl"})
public static void imageUrl(ImageView view, String imageUrl) {
    try {
        if (imageUrl!=null) {
            Glide.with(view.getContext()).load(imageUrl).into(view);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

崩溃日志:

 04-23 13:19:34.390 4758-4758/xx.xx.xxxE/AndroidRuntime: FATAL EXCEPTION: main
    Process: xxx.xx.xxxx, PID: 4758
    java.lang.RuntimeException: Unable to destroy activity {xx.xx.xx/x.xx.xx.xxx.xxxxActivity}: java.lang.IllegalStateException: Cannot obtain size for recycled Bitmap: android.graphics.Bitmap@e212eb2[12x12] ARGB_8888
        at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4603)
        at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4621)
        at android.app.ActivityThread.-wrap5(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1757)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.IllegalStateException: Cannot obtain size for recycled Bitmap: android.graphics.Bitmap@e212eb2[12x12] ARGB_8888
        at com.bumptech.glide.util.Util.getBitmapByteSize(Util.java:74)
        at com.bumptech.glide.load.engine.bitmap_recycle.SizeConfigStrategy.removeLast(SizeConfigStrategy.java:97)
        at com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool.trimToSize(LruBitmapPool.java:221)
        at com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool.evict(LruBitmapPool.java:116)
        at com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool.put(LruBitmapPool.java:112)
        at com.bumptech.glide.load.resource.bitmap.LazyBitmapDrawableResource.recycle(LazyBitmapDrawableResource.java:57)
        at com.bumptech.glide.load.engine.EngineResource.recycle(EngineResource.java:63)
        at com.bumptech.glide.load.engine.ResourceRecycler.recycle(ResourceRecycler.java:28)
        at com.bumptech.glide.load.engine.Engine.onResourceRemoved(Engine.java:326)
        at com.bumptech.glide.load.engine.cache.LruResourceCache.onItemEvicted(LruResourceCache.java:31)
        at com.bumptech.glide.load.engine.cache.LruResourceCache.onItemEvicted(LruResourceCache.java:11)
        at com.bumptech.glide.util.LruCache.trimToSize(LruCache.java:175)
        at com.bumptech.glide.util.LruCache.evict(LruCache.java:180)
        at com.bumptech.glide.util.LruCache.put(LruCache.java:135)
        at com.bumptech.glide.load.engine.cache.LruResourceCache.put(LruResourceCache.java:11)
        at com.bumptech.glide.load.engine.Engine.onResourceReleased(Engine.java:334)
        at com.bumptech.glide.load.engine.EngineResource.release(EngineResource.java:101)
        at com.bumptech.glide.load.engine.Engine.release(Engine.java:292)
        at com.bumptech.glide.request.SingleRequest.releaseResource(SingleRequest.java:337)
        at com.bumptech.glide.request.SingleRequest.clear(SingleRequest.java:316)
        at com.bumptech.glide.manager.RequestTracker.clearRemoveAndRecycle(RequestTracker.java:62)
        at com.bumptech.glide.RequestManager.untrack(RequestManager.java:462)
        at com.bumptech.glide.RequestManager.untrackOrDelegate(RequestManager.java:449)
        at com.bumptech.glide.RequestManager.clear(RequestManager.java:437)
        at com.bumptech.glide.RequestManager.onDestroy(RequestManager.java:290)
        at com.bumptech.glide.manager.ActivityFragmentLifecycle.onDestroy(ActivityFragmentLifecycle.java:64)
        at com.bumptech.glide.manager.SupportRequestManagerFragment.onDestroy(SupportRequestManagerFragment.java:187)
        at android.support.v4.app.Fragment.performDestroy(Fragment.java:2516)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1557)
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
        at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3227)
        at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:3218)
        at android.support.v4.app.FragmentController.dispatchDestroy(FragmentController.java:262)
    04-23 13:19:34.391 4758-4758/xx.xxx.xxxE/AndroidRuntime:     at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:362)
            at android.support.v7.app.AppCompatActivity.onDestroy(AppCompatActivity.java:209)
            at android.app.Activity.performDestroy(Activity.java:7462)
            at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1255)
            at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4590)
                ... 9 more

*使用“xxx”作为包名忽略它。

【问题讨论】:

    标签: android crash imageview android-glide


    【解决方案1】:

    试试RequestOptions & 升级版本。

    RequestOptions requestOptions = new RequestOptions();
                     Glide.with(getContext())
                        .setDefaultRequestOptions(requestOptions)
                        .load(imageUrl)
                        .into(view);
    

    build.gradle应该是

     dependencies {
      implementation 'com.github.bumptech.glide:glide:4.6.1'
     }
    

    您可以阅读Cannot obtain size for recycled Bitmap (LazyBitmapDrawableResource)

    【讨论】:

    • 当我尝试通过绑定类升级 Glide 版本时出现错误。 “错误:包 xx.xx.xxx..数据绑定不存在”
    • 感谢您的参考链接。如果它是旧版本的 glide,它可以完美地工作。找不到这个问题背后的原因。
    • @AsifSb 可能是错误。 4.6.1 稳定。你可以用这个。
    • 你会那样做的。但请让我知道它是否对您有用。
    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2014-04-30
    相关资源
    最近更新 更多