Glide是一款比較強大的android圖片加載庫,加載圖片一行代碼就能搞定。使用glide以及有一段時間了,最近打算深入的理解glide的工作原理,本文用來記錄學(xué)習(xí)glide的相關(guān)知識。
Glide
glide圖片的簡單使用,只有一行代碼glide.with().load().into()。
先說with方法
1. with方法用來控制glide圖片加載的生命周期,里面可以傳入activity、fragment、application。其實主要是分為兩種,一種是application,一種是非application。
2. 當(dāng)傳入application 的時候,glide加載的生命周期跟隨應(yīng)用程序一樣,不需要特殊處理
3. 當(dāng)傳入activity或者fragment的時候,glide會和activity的生命周期綁定。
這里實現(xiàn)的原理是,glide添加了一個透明的fragment,根據(jù)透明fragment的生命周期來監(jiān)聽activity生命周期。
load方法
load是用來加載圖片資源的。根據(jù)傳入的類型不同glide加載的方式不同。
說說glide緩存機制,一個是內(nèi)存的緩存,一個是磁盤的緩存。
key的生成
glide緩存key的生成,根據(jù)圖片的url地址和
注意:
這里如果想自定義key的生成可自己實現(xiàn)glideurl,傳入load方法中
signature、with、height等十個參數(shù),比較繁瑣。所以一個圖片的原圖和縮略圖對應(yīng)的不是一張圖片。
內(nèi)存的緩存
skipyMemorycache可以控制是否需要內(nèi)存緩存
分為兩個部分,一個使用lrucache緩存,還有一個使用弱飲用機制緩存,主要是防止正在使用的圖片緩存被lrucache清除
磁盤緩存
也是使用的lrucache
Google提供了一個disklrucache
diskcachestrategy可以控制磁盤緩存策略
- diskcachestrategy.none 表示不本地緩存圖片
- diskcachestrategy.source 表示只緩存源圖片
- diskcachestrategy.result 表示只緩存轉(zhuǎn)化后的圖片
- dikcachestrategy.all 表示既緩存源圖片有緩存轉(zhuǎn)化后的圖片
into方法
主要是將圖片顯示view中
into顯示的時候會根據(jù)imageview.getscalseltype對圖片進行處理源碼中只處理了兩種,centercrop和fitcenter兩種
into方法中也可以傳入target,我們自定義處理主要有兩種,一種simpletarget和viewtargwt
兩者都可以拿到圖片資源,可以處理很多事情
本文參考如下: