Glide 图片加载原理梳理

glide 用法 Glide.with(mContext)
.load(url)
.into(iv);

with ()方法返回 RequestManager---》用于请求的设置
load()方法返回 RequestBuilder---》请求参数确认
into()方法返回 ViewTarget 同时开始测量图片进行加载
调用into方法时 创建一个request 默认为SingleRequest
然后调用request 的begin() 开始请求;---》SingleRequest.onSizeReady()
调用engine进行load
先创建每个request的 EngineKey 用来区分不同的图片请求
用key 先从活跃的缓存(loadFromActiveResources)文件去取图片资源 ---一级缓存
从缓存汇中取图片资源(loadFromCache) --- 二级缓存
从网络加载图片 EngineJob start开始加载图片 ---三级缓存

网络加载图片 流程
由EngineJob 启动DecodeJob 的run()方法执行runWrapped()---》runGenerators()--》currentGenerator.startNext() (SourceGenerator#startNext)--- loadData.fetcher.loadData()---
HttpUrlFetcher#loadData --- HttpUrlFetcher#loadDataWithRedirects()获取图片资源InputStream
利用 HttpURLConnection 《内部使用okhttp》

获取资源inputstream 流开始回调callback.onDataReady--》 cb.onDataFetcherReady--》decodeFromRetrievedData()--notifyEncodeAndRelease()--notifyComplete-- entry.executor.execute(new CallResourceReady()---SingleRequest#onResourceReady()--target.onResourceReady()--ImageViewTarget#onResourceReady---BitmapImageViewTarget#setResource---显示图片view.setImageBitmap(resource);

你可能感兴趣的:(Glide 图片加载原理梳理)