Android開源框架如何說-Gilde4

概念

  • Glide是google官方推薦的,而且使用起來非常的方便而且功能十分強(qiáng)大,鏈?zhǔn)秸{(diào)用

  • 主方法

    • with()Glide.with()用于創(chuàng)建一個(gè)加載圖片的實(shí)例,with()方法可以接收 Context、Activity 或者 Fragment 類型的參數(shù),加載配置自定義AppGlideModule ,創(chuàng)建隱藏的Fragment來同步監(jiān)聽生命周期與整個(gè)組件的生命周期綁定在一起
    • load() :用于初始化一些參數(shù),指定待加載的圖片資源,支持加載各種各樣的圖片資源,包括網(wǎng)絡(luò)圖片、本地圖片、應(yīng)用資源、二進(jìn)制流、Uri 對(duì)象等等并且可以指定格式加載asGif,asBitmap,asDrawable
    • into(): 將圖片獲取并通過一系列處理后加載到相應(yīng)控件中,這部分邏輯最為復(fù)雜,建立請(qǐng)求,然后通過Engine引擎類將請(qǐng)求進(jìn)行統(tǒng)一的處理,里面開啟了兩個(gè)線程池(diskcacheService)磁盤緩存線程池和(SourceService)源線程池,并且進(jìn)行了兩層緩存,除了我們常見的內(nèi)存緩存外,還進(jìn)行了活動(dòng)資源的緩存,其中內(nèi)部的網(wǎng)絡(luò)請(qǐng)求是通過android原生的httpurlConnection去完成的
    • Glide#with獲取一個(gè)全局的單例對(duì)象RequestManagerRetriever,由它負(fù)責(zé)去獲取一個(gè)和Context相關(guān)的并且對(duì)Context唯一的RequestManager對(duì)象,并且已經(jīng)和宿主Activity生命周期綁定。
      RequestManager#load構(gòu)建一個(gè)RequestBuilder對(duì)象,供用戶設(shè)置大量參數(shù),并返回一個(gè)RequestBuilder對(duì)象。
      RequestBuilder#into構(gòu)建一個(gè)Target和一個(gè)Request對(duì)象,并完成它們的雙向綁定關(guān)系。在交由RequestManager之前檢查是否需要發(fā)起請(qǐng)求,如果需要?jiǎng)t進(jìn)入下一步,否則直接結(jié)束。
      RequestManager#track觸發(fā)請(qǐng)求request的執(zhí)行,從而簡(jiǎn)單的圖片加載至此結(jié)束,后續(xù)request加載狀態(tài)會(huì)反應(yīng)至target上面,進(jìn)而和target相關(guān)的控件會(huì)得到更新,自此一個(gè)圖片就正確的呈現(xiàn)在ui界面上。
  • 常用的方法

    • placeholder()
    • diskCacheStrategy()
    • error()
    • override()
    • thumbnail()

整體架構(gòu)(可以從以下幾個(gè)每個(gè)點(diǎn)深入切入)

  • Bitmap:android2.3、2.3+、8.0+ 內(nèi)存分布,BitmapFactor(圖片壓縮)
  • 緩存機(jī)制:LruCache、DiskLruCache(LinkedHashMap)
  • Lifecycle:
  • 流程調(diào)用鏈:
  • 數(shù)據(jù)加載模塊:DataFetcher、ModelLoader

加載核心Engine類

  • 內(nèi)存緩存 LruBitmapPool
  • 本地緩存 DiskLruCacheFactory
  • sourceService 處理源資源的線程池
  • diskCacheService 處理本地緩存的線程池
  • callback

緩存機(jī)制

  • 和其他三級(jí)緩存一樣,Glide的緩存讀取順序是 內(nèi)存–>磁盤–>網(wǎng)絡(luò)
    • 內(nèi)存緩存中加載圖片,有兩個(gè)層級(jí),一個(gè)是MemoryCache,一個(gè)是ActiveResouces
    • 磁盤、網(wǎng)絡(luò)加載則開啟線程加載
  • Glide的緩存資源分為兩種:原圖(SOURCE) 、處理圖(RESULT)
  • Glide自動(dòng)就是開啟內(nèi)存緩存.skipMemoryCache(true) 不必要配置
  • 磁盤緩存.diskCacheStrategy()四種策略
簡(jiǎn)易流程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【Android 庫(kù) Glide】 引用 Android圖片加載框架最全解析(一),Glide的基本用法Andro...
    Rtia閱讀 5,890評(píng)論 0 22
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,836評(píng)論 25 709
  • 用碎片化的時(shí)間看完了這本厚厚的書,這里我談兩點(diǎn)感想: (一)我和運(yùn)營(yíng) 最初接觸“運(yùn)營(yíng)”這個(gè)詞,是因?yàn)樵?jīng)工作過的一...
    Linda_4c18閱讀 131評(píng)論 0 0
  • 叨叨戚轉(zhuǎn)自微信群 《冰雪后開車必備》原版見后附全文(掃碼)。高效能的帶優(yōu)先級(jí)分類簡(jiǎn)化版如下: 【易忽略特別提醒】在...
    船長(zhǎng)戚戈XGeek001閱讀 211評(píng)論 0 1
  • 原來, 你也已經(jīng)兩鬢斑白了。 一直硬朗, 一直健康, 掩蓋了你年老的事實(shí)。 躺下一周, 子息奔波一周。 未來三個(gè)星...
    清益閱讀 270評(píng)論 0 1

友情鏈接更多精彩內(nèi)容