概念
Glide是google官方推荐的,而且使用起来非常的方便而且功能十分强大,链式调用
-
主方法
-
with()
:Glide.with()
用于创建一个加载图片的实例,with()
方法可以接收 Context、Activity 或者 Fragment 类型的参数,加载配置自定义AppGlideModule
,创建隐藏的Fragment来同步监听生命周期与整个组件的生命周期绑定在一起 -
load()
:用于初始化一些参数,指定待加载的图片资源,支持加载各种各样的图片资源,包括网络图片、本地图片、应用资源、二进制流、Uri 对象等等并且可以指定格式加载asGif,asBitmap,asDrawable -
into()
: 将图片获取并通过一系列处理后加载到相应控件中,这部分逻辑最为复杂,建立请求,然后通过Engine引擎类将请求进行统一的处理,里面开启了两个线程池(diskcacheService)磁盘缓存线程池和(SourceService)源线程池,并且进行了两层缓存,除了我们常见的内存缓存外,还进行了活动资源的缓存,其中内部的网络请求是通过android原生的httpurlConnection去完成的 - Glide#with获取一个全局的单例对象RequestManagerRetriever,由它负责去获取一个和Context相关的并且对Context唯一的RequestManager对象,并且已经和宿主Activity生命周期绑定。
RequestManager#load构建一个RequestBuilder对象,供用户设置大量参数,并返回一个RequestBuilder对象。
RequestBuilder#into构建一个Target和一个Request对象,并完成它们的双向绑定关系。在交由RequestManager之前检查是否需要发起请求,如果需要则进入下一步,否则直接结束。
RequestManager#track触发请求request的执行,从而简单的图片加载至此结束,后续request加载状态会反应至target上面,进而和target相关的控件会得到更新,自此一个图片就正确的呈现在ui界面上。
-
-
常用的方法
- placeholder()
- diskCacheStrategy()
- error()
- override()
- thumbnail()
整体架构(可以从以下几个每个点深入切入)
- Bitmap:android2.3、2.3+、8.0+ 内存分布,BitmapFactor(图片压缩)
- 缓存机制:LruCache、DiskLruCache(LinkedHashMap)
- Lifecycle:
- 流程调用链:
- 数据加载模块:DataFetcher、ModelLoader
加载核心Engine类
- 内存缓存 LruBitmapPool
- 本地缓存 DiskLruCacheFactory
- sourceService 处理源资源的线程池
- diskCacheService 处理本地缓存的线程池
- callback
缓存机制
- 和其他三级缓存一样,Glide的缓存读取顺序是 内存–>磁盘–>网络
- 内存缓存中加载图片,有两个层级,一个是MemoryCache,一个是ActiveResouces
- 磁盘、网络加载则开启线程加载
- Glide的缓存资源分为两种:原图(SOURCE) 、处理图(RESULT)
- Glide自动就是开启内存缓存
.skipMemoryCache(true)
不必要配置 - 磁盘缓存
.diskCacheStrategy()
四种策略