GlideV4源碼分析

1. 前言

1.1 現有Glide V4源碼分析文章

現有的Glide V4源碼分析的文章包含許多優秀的文章:

這些文章都對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的過程

整體轉化過程

  1. Model經過ModelLoader處理轉化爲DataClass(eg:Url->Bitmap)
  2. DataClass經過ResourceDecoder轉化爲Resource(eg:Bitmap->Resource<BitmapDrawable>
  3. Resource經過Transformation轉化爲transformsResource(eg:轉化爲圓角或者圓形)
  4. 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的實例:

參考文獻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章