Glide.into

2018-10-12  本文已影响0人  littleGrow

Glide版本4.7.1

GlideApp.with(FragmentActivity).load(String).into(ImageView)中into的流程:

GlideApp.with(FragmentActivity).load(String)返回GlideRequest<Drawable>(RequestBuilder的子类)

其中,从SourceGenerator找到HttpUrlFetcher的过程比较麻烦。首先,从SourceGenerator的startNext方法内部找到helper.getLoadData()获取loadData。然后从Glide的register中获取满足条件的ModelLoader,这时候你会发现获取到多个ModelLoader(DataUrlLoader,StringLoader)。那么如何去判断真正使用的是哪个ModelLoader呢?从下面代码中获取:

图2

首先,在图2的1处根据RequestOptions中的diskCacheStrategy和ModelLoader中的fetcher的DataSource做比较,默认的缓存策略是DiskCacheStrategy.AUTOMATIC即从网络获取;如果缓存策略DiskCacheStrategy是NONE则在图2的2处从Glide中去继续查找做第二次的判断;至此我们找到真正加载图片的HttpUrlFetcher。关于Glide的图片缓存可以参考文章Glide的图片缓存 - 简书

以下则是获取到InputStream后转换成图片加载的过程:

最后再调用DrawableImageViewTarget的onResourceReady方法加图片加载到ImageView上。

上一篇下一篇

猜你喜欢

热点阅读