图片回调的流程
前面的文章详细介绍了Glide加载图片的流程,这里我们重点回顾一下图片的的显示流程:DecodeJob完成图片的装载之后,会回调到notifyEncodeAndRelease()方法,之后的流程如下:
上面的流程可以看到,图片展示的地方是在Target的onResourceReady()中执行的。这里的Target是哪个步骤构建的呢?回顾一下前面的文章流程中可以知道,在into()方法中,会构建Target,在Request的构建中,Target作为参数传进Request中。
自定义Target的原理和实现
上面的图片回调流程基本上就介绍了Target的原理,自定义Target的时候,只需要实现onResourceReady()方法中展示图片即可,使用定义Target的用法如下:
SimpleTarget<GlideDrawable> simpleTarget = new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) {
imageView.setImageDrawable(resource);
}
};
public void loadImage(View view) {
String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";
Glide.with(this)
.load(url)
.into(simpleTarget);
以上是基本的自定义Target的用法,掌握了图片的显示流程就可以定义复杂的Target,实现复杂的图片加载需求。
Preload的功能和原理
preload()可以替换into()法的另外一个方法,和into()不同的是,preload()方法只加载图片,而不显示图片,是一种图片预加载的功能,使真正显示图片的时候不需要从网络获取,提高图片的显示速度。preload()方法是如何实现不加载图片的呢?通过前面的图片加载流程,我们知道,获取图片之后DecodeJob会执行图片的显示