目标:Glide.with(this).load(url).into(imageView)
搞明白这行代码到底做了什么
1 with(this)方法
多个重载函数,第一次调用则初始化Glide。如果this传入的为application,则无需多余处理。如果传入的为activity或者fragment,则生成一个隐藏的fragment来监听activity的生命周期。最终返回RequestManager对象。
如果是在非主线程调用,则都强制当成application来处理。
2 load(url)方法
生成RequestBuilder对象并配置apply传入的各项配置参数。RequestBuilder为泛型,传入url或者bitmap生成不同泛型的RequestBuilder。
3 into方法
首先通过glide.buildImageViewTarget()构建出一个ViewTarget对象,这个对象是用来最终展示图片用的,分BitmapImageViewTarget和GlideDrawableImageViewTarget两种。构建以及初始化Request对象,之后由Engine来执行请求,获得数据后进行编解码。
4 缓存
分为硬盘缓存与内存缓存。10多个参数生成缓存Key。 内存缓存使用了两种缓存方式,LruCache算法与弱引用。正在使用中的图片使用弱引用,不在使用中的图片使用LruCache算法做缓存。硬盘缓存同样使用LruCache算法,使用DiskLruCache工具进行缓存的存入与读取。
5 其他使用技巧
自定义target,preload预加载。
图片转换:github.com/wasabeef/gl…