Glide 原始碼解析 之 ModelLoader

2021-09-11 13:25:45 字數 1342 閱讀 4465

在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...