UML如下:
diagram_datafetcher_and_modelloader.png
glide數(shù)據(jù)加載模塊锅移,基本結(jié)構(gòu)如上圖所示,DataFetcher定義了取數(shù)據(jù)的接口,具體的通過何種方式取數(shù)據(jù)拯欧,網(wǎng)絡(luò)還是本地打颤,均是由其子類實(shí)現(xiàn),接下來我們介紹DataFetcher的幾個(gè)子類于个。ModelLoader是一個(gè)工廠接口氛魁,用于將任意復(fù)雜的數(shù)據(jù)模型轉(zhuǎn)換為具體數(shù)據(jù)類型,從而能夠使用DataFetcher去獲取由該模型表示的資源的數(shù)據(jù)厅篓,具體的ModelLoader實(shí)現(xiàn)類會(huì)根據(jù)自己的需要構(gòu)建自己的DataFetcher實(shí)現(xiàn)類秀存。整個(gè)加載過程是從ModelLoader開始,構(gòu)造出相應(yīng)的DataFetcher羽氮。調(diào)用buildLoadData返回給上層一個(gè)LoadData對(duì)象或链。LoadData內(nèi)部持有一個(gè)DataFetcher的引用,在具體加載地方档押,通過使用LoadData對(duì)象澳盐,獲取其DataFetcher引用,從而調(diào)用DataFetcher#loadData方法令宿,開始執(zhí)行加載叼耙。最后在DataFetcher的DataCallback中給予數(shù)據(jù)加載的狀態(tài),成功或者失敗粒没。供上層調(diào)用模塊去處理加載結(jié)果筛婉。
DataFetcher
- DataSource
指示一些檢索到的數(shù)據(jù)的來源。目前有五種:
LOCAL:表示數(shù)據(jù)可能是從設(shè)備本地獲取的癞松。
REMOTE:表示數(shù)據(jù)是從設(shè)備以外的遠(yuǎn)程源檢索的爽撒。
DATA_DISK_CACHE:表示數(shù)據(jù)是從設(shè)備高速緩存未經(jīng)修改而檢索的。
RESOURCE_DISK_CACHE:表示數(shù)據(jù)是從設(shè)備緩存中的修改內(nèi)容中檢索的响蓉。
MEMORY_CACHE:表示數(shù)據(jù)是從內(nèi)存緩存中檢索的硕勿。 - DataFetcher
延遲檢索能夠用作資源加載的數(shù)據(jù)。 - DataCallback
加載數(shù)據(jù)成功和失敗的回調(diào)厕妖。
- LocalUriFetcher
DataFetcher實(shí)現(xiàn)類首尼,它使用{@link android.content.ContentResolver}從指向本地資源的Uri加載數(shù)據(jù)挑庶。 - AssetFileDescriptorLocalUriFetcher
LocalUriFetcher子類,具體加載的數(shù)據(jù)類型是AssetFileDescriptor软能。 - FileDescriptorLocalUriFetcher
LocalUriFetcher子類迎捺,具體加載的數(shù)據(jù)類型是ParcelFileDescriptor。 - StreamLocalUriFetcher
LocalUriFetcher子類查排,具體加載的數(shù)據(jù)類型是InputStream凳枝。
- AssetPathFetcher
DataFetcher實(shí)現(xiàn)類,它使用{@link android.content.res.AssetManager}從asset path中獲取數(shù)據(jù)的抽象類跋核。 - FileDescriptorAssetPathFetcher
AssetPathFetcher子類岖瑰,具體加載的數(shù)據(jù)類型是ParcelFileDescriptor。 - StreamAssetPathFetcher
AssetPathFetcher子類砂代,具體加載的數(shù)據(jù)類型是InputStream蹋订。
- HttpUrlFetcher
DataFetcher實(shí)現(xiàn)類,具體加載的數(shù)據(jù)類型為InputStream刻伊,從網(wǎng)絡(luò)Url中獲取數(shù)據(jù)露戒。 - ThumbFetcher
DataFetcher實(shí)現(xiàn)類,具體加載的數(shù)據(jù)類型為InputStream捶箱,從縮略圖文件中獲取數(shù)據(jù)智什。
ModelLoader
- ModelLoader
一個(gè)工廠接口,用于將任意復(fù)雜的數(shù)據(jù)模型轉(zhuǎn)換為具體數(shù)據(jù)類型丁屎,從而能夠使用DataFetcher去獲取由該模型表示的資源的數(shù)據(jù)荠锭。 - LoadData
一系列Key和DataFetcher組合的一個(gè)數(shù)據(jù)結(jié)構(gòu)。 - HttpGlideUrlLoader
ModelLoader實(shí)現(xiàn)類晨川,內(nèi)部會(huì)構(gòu)建一個(gè)HttpUrlFetcher對(duì)象证九。 - FileLoader
ModelLoader實(shí)現(xiàn)類,內(nèi)部會(huì)構(gòu)建一個(gè)FileFetcher對(duì)象共虑。
glide庫中提供了大致20種ModelLoader實(shí)現(xiàn)類甫贯,每個(gè)均會(huì)創(chuàng)建一個(gè)相應(yīng)的DataFetcher對(duì)象,其他的就不一一列出了看蚜。有興趣的可以自行看庫工程的代碼,看一些其他實(shí)現(xiàn)類赔桌。