概念
Glide是google官方推薦的,而且使用起來非常的方便而且功能十分強(qiáng)大,鏈?zhǔn)秸{(diào)用
-
主方法
-
with():Glide.with()用于創(chuàng)建一個(gè)加載圖片的實(shí)例,with()方法可以接收 Context、Activity 或者 Fragment 類型的參數(shù),加載配置自定義AppGlideModule,創(chuàng)建隱藏的Fragment來同步監(jiān)聽生命周期與整個(gè)組件的生命周期綁定在一起 -
load():用于初始化一些參數(shù),指定待加載的圖片資源,支持加載各種各樣的圖片資源,包括網(wǎng)絡(luò)圖片、本地圖片、應(yīng)用資源、二進(jìn)制流、Uri 對(duì)象等等并且可以指定格式加載asGif,asBitmap,asDrawable -
into(): 將圖片獲取并通過一系列處理后加載到相應(yīng)控件中,這部分邏輯最為復(fù)雜,建立請(qǐng)求,然后通過Engine引擎類將請(qǐng)求進(jìn)行統(tǒng)一的處理,里面開啟了兩個(gè)線程池(diskcacheService)磁盤緩存線程池和(SourceService)源線程池,并且進(jìn)行了兩層緩存,除了我們常見的內(nèi)存緩存外,還進(jìn)行了活動(dòng)資源的緩存,其中內(nèi)部的網(wǎng)絡(luò)請(qǐng)求是通過android原生的httpurlConnection去完成的 - Glide#with獲取一個(gè)全局的單例對(duì)象RequestManagerRetriever,由它負(fù)責(zé)去獲取一個(gè)和Context相關(guān)的并且對(duì)Context唯一的RequestManager對(duì)象,并且已經(jīng)和宿主Activity生命周期綁定。
RequestManager#load構(gòu)建一個(gè)RequestBuilder對(duì)象,供用戶設(shè)置大量參數(shù),并返回一個(gè)RequestBuilder對(duì)象。
RequestBuilder#into構(gòu)建一個(gè)Target和一個(gè)Request對(duì)象,并完成它們的雙向綁定關(guān)系。在交由RequestManager之前檢查是否需要發(fā)起請(qǐng)求,如果需要?jiǎng)t進(jìn)入下一步,否則直接結(jié)束。
RequestManager#track觸發(fā)請(qǐng)求request的執(zhí)行,從而簡(jiǎn)單的圖片加載至此結(jié)束,后續(xù)request加載狀態(tài)會(huì)反應(yīng)至target上面,進(jìn)而和target相關(guān)的控件會(huì)得到更新,自此一個(gè)圖片就正確的呈現(xiàn)在ui界面上。
-
-
常用的方法
- placeholder()
- diskCacheStrategy()
- error()
- override()
- thumbnail()
整體架構(gòu)(可以從以下幾個(gè)每個(gè)點(diǎn)深入切入)
- Bitmap:android2.3、2.3+、8.0+ 內(nèi)存分布,BitmapFactor(圖片壓縮)
- 緩存機(jī)制:LruCache、DiskLruCache(LinkedHashMap)
- Lifecycle:
- 流程調(diào)用鏈:
- 數(shù)據(jù)加載模塊:DataFetcher、ModelLoader
加載核心Engine類
- 內(nèi)存緩存 LruBitmapPool
- 本地緩存 DiskLruCacheFactory
- sourceService 處理源資源的線程池
- diskCacheService 處理本地緩存的線程池
- callback
緩存機(jī)制
- 和其他三級(jí)緩存一樣,Glide的緩存讀取順序是 內(nèi)存–>磁盤–>網(wǎng)絡(luò)
- 內(nèi)存緩存中加載圖片,有兩個(gè)層級(jí),一個(gè)是MemoryCache,一個(gè)是ActiveResouces
- 磁盤、網(wǎng)絡(luò)加載則開啟線程加載
- Glide的緩存資源分為兩種:原圖(SOURCE) 、處理圖(RESULT)
- Glide自動(dòng)就是開啟內(nèi)存緩存
.skipMemoryCache(true)不必要配置 - 磁盤緩存
.diskCacheStrategy()四種策略

簡(jiǎn)易流程