數(shù)據(jù)加載DataFetcher與ModelLoader結(jié)構(gòu)

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)類赔桌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末供炎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子疾党,更是在濱河造成了極大的恐慌音诫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雪位,死亡現(xiàn)場離奇詭異竭钝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門香罐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卧波,“玉大人,你說我怎么就攤上這事庇茫「哿唬” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵旦签,是天一觀的道長查坪。 經(jīng)常有香客問我,道長宁炫,這世上最難降的妖魔是什么偿曙? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮羔巢,結(jié)果婚禮上望忆,老公的妹妹穿的比我還像新娘。我一直安慰自己朵纷,他們只是感情好炭臭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袍辞,像睡著了一般鞋仍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搅吁,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天威创,我揣著相機(jī)與錄音,去河邊找鬼谎懦。 笑死肚豺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的界拦。 我是一名探鬼主播吸申,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼享甸!你這毒婦竟也來了截碴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蛉威,失蹤者是張志新(化名)和其女友劉穎日丹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚯嫌,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哲虾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年丙躏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片束凑。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晒旅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湘今,到底是詐尸還是另有隱情敢朱,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布摩瞎,位于F島的核電站拴签,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏旗们。R本人自食惡果不足惜蚓哩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望上渴。 院中可真熱鬧岸梨,春花似錦、人聲如沸稠氮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隔披。三九已至赃份,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奢米,已是汗流浹背抓韩。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鬓长,地道東北人谒拴。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像涉波,于是被迫代替她去往敵國和親英上。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容