Glide.with(context).load(filepath).into(ImageView)
其中:
with()方法的主要作用是管理图片请求的生命周期
load()方法主要是构建请求的Request对象
into()方法最复杂,包括发起请求和加载图片的具体过程
Glide请求会跟随context的生命周期,在这里context可以是Application、Activity或者Fragment。
·如果context是一个非Application对象,如Activity或者Fragment,Glide会向当前的Activity中添加一个隐藏的Fragment,这样就可以监听Activity的生命周期。
·如果是一个Application,那么Glide不需要做什么,直接跟随App的生命周期即可。
·如果是在非主线程中使用Glide,不管传入什么context都会当成Application处理
Glide第三方库的优点在于对图片资源生命周期的管理比较好,使用Glide库加载图片资源可以使App在内存管理上有很大优势,此外Glide还可以支持相当数量的不同资源类型加载。
缓存方面,Glide分两个模块,一个是内存缓存,一个是硬盘缓存。
内存缓存又分两级:LRU Cache缓存和弱引用缓存。
硬盘缓存也分两级:处理资源缓存和未处理资源缓存,由Glide自带的DiskLruCache工具类实现
Glide的load逻辑:(全部在into()方法里)
a.首先通过KeyFactory创建一个EngineKey对象,它是一个缓存key,也就是加载资源的标识符。
b.内存缓存
一级缓存:LRU缓存 MemoryCache
不在使用中的图片使用LRUCache来进行缓存
具体实现在loadFromCache()方法中
二级缓存:活跃资源缓存 ActiveResourceCache
正在使用中的图片用弱引用缓存
具体实现在loadFromActiveResources()方法中
c.检查当前已存在的EngineJob中是否有相同的EngineKey,如果没有就创建新的EngineJob
d.磁盘缓存
在启动EngineJob之后,先去检查磁盘缓存。磁盘缓存也分两种:
一级缓存:decodeResultFromCache()
从处理之后(如剪切)的图片中检查是否有匹配的
二级缓存:decodeSourceFromCache()
检查是否存在匹配的未处理资源
f.请求网络资源 decodeFromSource()