1. 前言
1.1 現有Glide V4源碼分析文章
現有的Glide V4源碼分析的文章包含許多優秀的文章:
【1】對Glide的Load過程進行詳細的分析: https://blog.csdn.net/github_33304260/article/details/78116312
with過程分析相近,思考深入,load過程相近,但是過於冗長【2】對Glide的主要功能和主要的類進行了介紹:https://blog.csdn.net/json_it/article/details/78573562
總結了Glide主要特點【3】用圖文的方式對Glide的工作過程進行了詳細分析:https://juejin.im/entry/586766331b69e60063d889ea
裏面的圖非常經典- 【4】Glide基本概念介紹:https://www.angeldevil.me/2016/09/05/glide/
這些文章都對Glide源碼分析比較透徹,【1】裏面貼了太多源碼,導致文章冗長,很難閱讀。【3】通過圖文的方式解決了這個問題,但是對load過程介紹過於簡化。因此,本文將以圖文的方式對glide的工作原理進行分析。主要包含
RequestManager的構建過程
Request的構建過程
Load的過程
1.2 需要分析的問題
(1)RequestManager如何實現生命週期關聯的
(2)Request創建的過程
(3)Transform的過程
(4)Bitmap的操作
1.2 Glide基本組件簡介
(1)工作原理
1.2.1 數據轉換過程
1.2.2 View轉化爲target的過程
View轉化爲Target過程
taget的類型
target的類型
Resource的類型
Glide的加載過程
1.3 分析的案例
爲了簡化問題,減少分析,如下demo所示,本文分析限定如下範圍:
- model類型爲url
- target爲ImageView
Glide.with(mContext)
.load(url1)
.into(imageView);
2. RequestManager的創建過程(with過程)
2.1 Context爲ApplicationContext的情況
2.2 Context爲Activity或者Fragment的情況
相關類圖
3. RequestBuilder創建過程(load過程)
4. 資源請求和綁定過程(into)
4.1 創建Request
4.2 執行Request,並且綁定到View上面
4 Model轉化爲transformedResource的過程
整體轉化過程
- Model經過ModelLoader處理轉化爲DataClass(eg:Url->Bitmap)
- DataClass經過ResourceDecoder轉化爲Resource(eg:
Bitmap->Resource<BitmapDrawable>
) - Resource經過Transformation轉化爲transformsResource(eg:轉化爲圓角或者圓形)
- transformsResource經過Encoder轉化爲LocalCache(eg:將Bitmap轉化存儲在本地磁盤上面)
Glide實現過程概覽
下圖是Glide實現上述轉化過程的流程圖,其包含了轉化過程關鍵步驟和關鍵的操作,具體源碼的實現,可參照下圖自己去看,收穫可能更大一些。
(1)說明:
- 綠色部分的角色代表上圖裏面各個轉化器
- 橙色部分代表數據類型發生轉化的地方
(2)關鍵類說明
- DecodeJob:整個轉化的過程均在DecodeJob之中完成
- ModelLoader:將Model轉化爲DataClass
- 依賴Fetcher來完成數據的獲取
- LoadPath:將DataClass轉化爲Resource
- 依賴DecodePath
- DecodePath:執行DataClass->Resource->transformedResource
- 依賴ResourceDecoder
- 依賴Transformation
上述關鍵類的實例簡述
ModelLoader
ModelLoader的實例:
Resource
Resource的實例:
Encoder
Encoder的實例:
參考文獻
- GlideV4源碼分析:http://www.lightskystreet.com/2015/10/12/glide_source_analysis/
- 圖非常好,非常清晰。本文部分圖片參考該文
- 對Glide的Load過程進行詳細的分析:https://blog.csdn.net/github_33304260/article/details/78116312
- 對Glide的主要功能和主要的類進行了介紹:https://blog.csdn.net/json_it/article/details/78573562
- Glide基本概念介紹:https://www.angeldevil.me/2016/09/05/glide/