Take care of Glide - litonghui/TechBlog GitHub Wiki

Take care of Glide

在最近开发工程中使用到了Glide,当然主要原因是Google推荐的图片加载库,专注于流畅的滚动,但是开发中也遇到了一下问题,可以引起注意。

1,onResourceReady not called:出现场景,url对应的图片太大,特别是长图时候。具体原因是未声明图片的长度和宽度。详查Glide Issues

Glide.with(this).load(url).placeholder(R.drawable.default).into(new SimpleTarget<GlideDrawable>() {
            @Override
            public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
                mLargeIv.setImage(resource);
            }
        });
仅供参考解决方案:Glide 和 OkHttp,Volley等集成网络栈方式,下载图像再显示。下载时候声明图片的长度和宽度
或使用Glide downloadOnly下载缓存资源,例如:
Glide.with(getApplicationContext())
                            .load(imageEntity.image).downloadOnly(new SimpleTarget<File>() {
                        @Override
                        public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) {
                            piv.setImage(new FileBitmapDecoderFactory(resource));
                        }
                    });

2. Glide 显示 Gif

Glide.with(context).load(gifUrl).asGif().error(R.drawable.default).into(imageViewGif);

Glide.with(context).load(gifUrl).asBitmap().into( imageViewGifAsBitmap );
其中asGif()用于检测是否为gif ,并显示,但是遇到非gif就会出现问题;asBitmap()会获取gif 第一帧显示,所有最好用的方式还是直接如下,当然建议增加placeholder 因为gif一般比较大,网络不佳显示缓慢需要占位。
Glide.with(context).load(gifUrl).placeholder(R.drawable.cupcake).error(R.drawable.default).into(imageViewGif );

3. Glide clearMemory 和 clearDiskCache,需要注意的是clearDiskCache需要子线程中调用。context 使用getApplicationContext(),防止activity未被销毁造成泄露。

Glide.get(getApplicationContext()).clearMemory();
    new Thread() {
        @Override
        public void run() {
            super.run();
            Glide.get(getApplicationContext()).clearDiskCache();
        }
    }.start();
⚠️ **GitHub.com Fallback** ⚠️