在最近开发工程中使用到了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));
}
});
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();