最终我还是决定使用Glide,作为我以后的主要图片加载框架。主要基于三点考虑
- 代码有人维护,不至于出现问题,项目组都搞不定的时候问题无法解决。(ImageLoader已没人维护了)
- 代码简洁,可读性很好。(Fresco是一个非常优秀的库,但是配置稍显麻烦,同时代码风格读起来有些生疏)
- 功能强大(400多k的包,包含很多功能,例如:像加载Gif图片就是Picasso做不到的)
但是,首要解决的就是,在Blog中提到的,图片常常加载失败。
打印错误日志与调试
我们看到仅仅是显示一张错误的图片,但是为什么会这样,日志里面没有任何输出。
监听器配置
Glide.with(getContext())
.load(url)
.listener(mRequestListener)//配置监听器
.placeholder(Drawables.sPlaceholderDrawable)
.error(Drawables.sErrorDrawable)
.into(mImageView);
打印日志
private RequestListener<String, GlideDrawable> mRequestListener = new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
//显示错误信息
Log.w(TAG, "onException: ", e);
//打印请求URL
Log.d(TAG, "onException: " + model);
//打印请求是否还在进行
Log.d(TAG, "onException: " + target.getRequest().isRunning());
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
};
这里的onException
捕获异常,如果返回true
表示我们自己处理掉了异常,false
表示交给Glide去处理,因为我们定义了.error()
那么就显示error里面的内容。
这里onResourceReady
表示是否准备资源显示,返回true
表示用户自己已经设置好资源,包括截取操作,动画操作之类的,准备好显示。false
表示交给Glide
如此修改后,看到日志终于打印出来了。查看日志,发现Glide本身自带的网络栈,在网络环境比较差的情况下(只是差,使用其他框架图片可以比较慢的显示出来)
/com.example.imageloadpk W/GlideHolder: onException:
java.lang.RuntimeException