在datafetchergenerator.startnext()載入資料時(以實現類sourcegenerator為例)會通過decodehelper去拿modelloader,然後拿到dataloader,然後使用dataloader中的fetcher去load資料。
modelloader 有著非常多的實現(如下圖),載入資料的過程中是如何拿到所需要的實現呢?
每個 modelloader 的實現類 在其build方法中,將對應的 datafetcher 實現類傳入dataloader中。
從下圖可以看到,registry有個方法getmodelloaders(),可以通過model拿到對應的 modelloader,其背後實現是 modelloaderregistry。
modelloaderregistry 會先從modelloadercache中取,如果沒有,會呼叫multimodelloade***ctory 去build,同時往cache存乙份。 拿到 modelloader 後,就呼叫其build方法生成 dataloader, 之後就可以用dataloader中的fetcher去load資料了。
@startuml
class glidecontext
class registry
class modelloaderregistry
class modelloadercache
class multimodelloade***ctory
class entry
inte***ce modelloade***ctory
inte***ce modelloader
class loaddata
inte***ce datafetcher
glidecontext --> registry : has
registry --> modelloaderregistry : has
modelloaderregistry --> multimodelloade***ctory : has
modelloaderregistry --> modelloadercache : has
multimodelloade***ctory "1"*-->"n" entry : contains
entry --> modelloade***ctory : has
modelloade***ctory --> modelloader : create
modelloader --> loaddata : create
loaddata --> datafetcher : has
@enduml
複製**
Glide原始碼解析
基本使用方法 glide.with this asdrawable load this into imageview glide.with 方法用於建立乙個載入的例項。with 方法可以接收context activity或者fragment型別的引數。load 方法,這個方法用於指定待載入的資源。...
Glide 原始碼解析 之 快取
glide 的快取型別有 2 種 記憶體快取 檔案快取 每種型別的快取又各有2級,共計 4 級快取 一級記憶體快取 activeresource 二級記憶體快取 lruresourcecache 一級檔案快取 二級檔案快取 通過hashmap weakreference實現 final mapact...
原始碼閱讀 Glide原始碼閱讀之with方法(一)
前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...