Glide.with(context).load(filepath).into(ImageView)
其中:
with()方法的主要作用是管理圖片請求的生命周期
load()方法主要是構(gòu)建請求的Request對象
into()方法最復(fù)雜,包括發(fā)起請求和加載圖片的具體過程
Glide請求會跟隨context的生命周期雏搂,在這里context可以是Application殉了、Activity或者Fragment蓝晒。
·如果context是一個非Application對象,如Activity或者Fragment呵晚,Glide會向當(dāng)前的Activity中添加一個隱藏的Fragment兆旬,這樣就可以監(jiān)聽Activity的生命周期。
·如果是一個Application朵栖,那么Glide不需要做什么,直接跟隨App的生命周期即可柴梆。
·如果是在非主線程中使用Glide陨溅,不管傳入什么context都會當(dāng)成Application處理
Glide第三方庫的優(yōu)點在于對圖片資源生命周期的管理比較好,使用Glide庫加載圖片資源可以使App在內(nèi)存管理上有很大優(yōu)勢绍在,此外Glide還可以支持相當(dāng)數(shù)量的不同資源類型加載门扇。
緩存方面雹有,Glide分兩個模塊,一個是內(nèi)存緩存臼寄,一個是硬盤緩存霸奕。
內(nèi)存緩存又分兩級:LRU Cache緩存和弱引用緩存。
硬盤緩存也分兩級:處理資源緩存和未處理資源緩存吉拳,由Glide自帶的DiskLruCache工具類實現(xiàn)
Glide的load邏輯:(全部在into()方法里)
a.首先通過KeyFactory創(chuàng)建一個EngineKey對象质帅,它是一個緩存key,也就是加載資源的標(biāo)識符留攒。
b.內(nèi)存緩存
一級緩存:LRU緩存 MemoryCache
不在使用中的圖片使用LRUCache來進(jìn)行緩存
具體實現(xiàn)在loadFromCache()方法中
二級緩存:活躍資源緩存 ActiveResourceCache
正在使用中的圖片用弱引用緩存
具體實現(xiàn)在loadFromActiveResources()方法中
c.檢查當(dāng)前已存在的EngineJob中是否有相同的EngineKey煤惩,如果沒有就創(chuàng)建新的EngineJob
d.磁盤緩存
在啟動EngineJob之后,先去檢查磁盤緩存稼跳。磁盤緩存也分兩種:
一級緩存:decodeResultFromCache()
從處理之后(如剪切)的圖片中檢查是否有匹配的
二級緩存:decodeSourceFromCache()
檢查是否存在匹配的未處理資源
f.請求網(wǎng)絡(luò)資源 decodeFromSource()