Glide版本4.7.1
GlideApp.with(FragmentActivity).load(String).into(ImageView)中into的流程:
GlideApp.with(FragmentActivity).load(String)返回GlideRequest
其中,从SourceGenerator找到HttpUrlFetcher的过程比较麻烦。首先,从SourceGenerator的startNext方法内部找到helper.getLoadData()获取loadData。然后从Glide的register中获取满足条件的ModelLoader,这时候你会发现获取到多个ModelLoader(DataUrlLoader,StringLoader)。那么如何去判断真正使用的是哪个ModelLoader呢?从下面代码中获取:
首先,在图2的1处根据RequestOptions中的diskCacheStrategy和ModelLoader中的fetcher的DataSource做比较,默认的缓存策略是DiskCacheStrategy.AUTOMATIC即从网络获取;如果缓存策略DiskCacheStrategy是NONE则在图2的2处从Glide中去继续查找做第二次的判断;至此我们找到真正加载图片的HttpUrlFetcher。关于Glide的图片缓存可以参考文章Glide的图片缓存 -
以下则是获取到InputStream后转换成图片加载的过程:
最后再调用DrawableImageViewTarget的onResourceReady方法加图片加载到ImageView上。