glide 用法 Glide.with(mContext)
.load(url)
.into(iv);
with ()方法返回 RequestManager---》用于請(qǐng)求的設(shè)置
load()方法返回 RequestBuilder---》請(qǐng)求參數(shù)確認(rèn)
into()方法返回 ViewTarget 同時(shí)開(kāi)始測(cè)量圖片進(jìn)行加載
調(diào)用into方法時(shí) 創(chuàng)建一個(gè)request 默認(rèn)為SingleRequest
然后調(diào)用request 的begin() 開(kāi)始請(qǐng)求前普;---》SingleRequest.onSizeReady()
調(diào)用engine進(jìn)行l(wèi)oad
先創(chuàng)建每個(gè)request的 EngineKey 用來(lái)區(qū)分不同的圖片請(qǐng)求
用key 先從活躍的緩存(loadFromActiveResources)文件去取圖片資源 ---一級(jí)緩存
從緩存匯中取圖片資源(loadFromCache) --- 二級(jí)緩存
從網(wǎng)絡(luò)加載圖片 EngineJob start開(kāi)始加載圖片 ---三級(jí)緩存
網(wǎng)絡(luò)加載圖片 流程
由EngineJob 啟動(dòng)DecodeJob 的run()方法執(zhí)行runWrapped()---》runGenerators()--》currentGenerator.startNext() (SourceGenerator#startNext)--- loadData.fetcher.loadData()---
HttpUrlFetcher#loadData --- HttpUrlFetcher#loadDataWithRedirects()獲取圖片資源InputStream
利用 HttpURLConnection 《內(nèi)部使用okhttp》
獲取資源inputstream 流開(kāi)始回調(diào)callback.onDataReady--》 cb.onDataFetcherReady--》decodeFromRetrievedData()--notifyEncodeAndRelease()--notifyComplete-- entry.executor.execute(new CallResourceReady()---SingleRequest#onResourceReady()--target.onResourceReady()--ImageViewTarget#onResourceReady---BitmapImageViewTarget#setResource---顯示圖片view.setImageBitmap(resource);