Glide源碼學(xué)習(xí)筆記

本文是基于郭霖glide源碼解析系列的學(xué)習(xí)筆記,在此記錄一下。

一、fragment巧用:

使用沒(méi)有界面的fragment來(lái)進(jìn)行生命周期的控制,活用fragment,這個(gè)技巧在很多開(kāi)源框架上都有使用,自己在項(xiàng)目中也有用到,確實(shí)不失為一種解決某些問(wèn)題的好方法;

二、glide緩存機(jī)制原理:

內(nèi)存緩存:

一個(gè)是弱引用來(lái)緩存正在使用中的圖片,一個(gè)是LruCache來(lái)緩存使用過(guò)的圖片。

采用計(jì)數(shù)的方式,當(dāng)acquired變量大于0的時(shí)候,說(shuō)明圖片正在使用中,也就應(yīng)該放到activeResources弱引用緩存當(dāng)中。

而經(jīng)過(guò)release()之后,如果acquired變量等于0了,說(shuō)明圖片已經(jīng)不再被使用了,就會(huì)將弱引用從map中移除,如果設(shè)置了緩存,

就會(huì)再將它put到LruResourceCache當(dāng)中。

磁盤(pán)緩存:

緩存原始圖片 or 緩存轉(zhuǎn)換過(guò)的圖片(默認(rèn)),硬盤(pán)緩存的實(shí)現(xiàn)也是使用的LruCache算法,原始圖片和轉(zhuǎn)換過(guò)的圖片只是緩存的key不一樣,

原始圖片的key使用的是圖片url,轉(zhuǎn)換過(guò)的圖片使用的是一堆參數(shù)生成的key。

三、高級(jí)技巧:

1.學(xué)習(xí)了glide緩存機(jī)制,知道緩存原理使用的key是圖片url或者根據(jù)url等一系列參數(shù)生成的,如果url后面拼接了類似token的數(shù)據(jù),那么圖片url就會(huì)動(dòng)態(tài)改變了。

因此glide緩存機(jī)制就失效的,為此我們通過(guò)讀取源碼發(fā)現(xiàn),可以通過(guò)創(chuàng)建一個(gè)自己的GlideUrl,重寫(xiě)getCacheKey()方法,在load的時(shí)候傳入即可。

2.獲取圖片對(duì)象GlideDrawable等,可以重寫(xiě)Target類,提供的有SimpleTarget。

3.預(yù)加載,preload()方法,原理是執(zhí)行一遍什么都不做就可以了。

4.下載圖片,downloadOnly(int width, int height)? 和 downloadOnly(Y target) 方法,前者需要在子線程執(zhí)行,因?yàn)樵趫?zhí)行過(guò)程中會(huì)阻塞線程,直到返回結(jié)果。后者需要重寫(xiě)一個(gè)實(shí)現(xiàn)Target接口的類。

5.變換,重寫(xiě)一個(gè)類繼承BitmapTransformation,重寫(xiě)transform方法;參考glide-transformations 開(kāi)源庫(kù)

6.自定義模塊,替換glide里的策略模式,如緩存策略、網(wǎng)絡(luò)請(qǐng)求策略

四、listener監(jiān)聽(tīng)機(jī)制:

類似冒泡式傳遞,onResourceReady()方法和onException()方法都有一個(gè)布爾值的返回值,返回false就表示這個(gè)事件沒(méi)有被處理,還會(huì)繼續(xù)向下傳遞,返回true就表示這個(gè)事件已經(jīng)被處理掉了,從而不會(huì)再繼續(xù)向下傳遞。舉個(gè)簡(jiǎn)單點(diǎn)的例子,如果我們?cè)赗equestListener的onResourceReady()方法中返回了true,那么就不會(huì)再回調(diào)Target的onResourceReady()方法了。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 學(xué)習(xí)來(lái)源:郭霖大師博客地址 1、圖片加載框架挺多,如Volley、Glide、Picasso、Fresco、本次是...
    子謙寶寶閱讀 1,825評(píng)論 0 6
  • Glide筆記 一、簡(jiǎn)介 在泰國(guó)舉行的谷歌開(kāi)發(fā)者論壇上,谷歌為我們介紹了一個(gè)名叫Glide的圖片加載庫(kù),作者是bu...
    AndroidMaster閱讀 4,086評(píng)論 0 27
  • 一、簡(jiǎn)介 在泰國(guó)舉行的谷歌開(kāi)發(fā)者論壇上,谷歌為我們介紹了一個(gè)名叫Glide的圖片加載庫(kù),作者是bumptech。這...
    天天大保建閱讀 7,754評(píng)論 2 28
  • 概述 剛才有說(shuō)到,有些朋友覺(jué)得Glide 4相對(duì)于Glide 3改動(dòng)非常大,其實(shí)不然。之所以大家會(huì)有這種錯(cuò)覺(jué),是因...
    陳曉松快點(diǎn)跑閱讀 2,316評(píng)論 0 14
  • 女人自結(jié)婚、生子后,想在完成工作、生活的繁重任務(wù)之余,再堅(jiān)持一點(diǎn)自己的夢(mèng)想,其實(shí)是一件挺不容易的事。家人的支持很重...
    盈盈清泉閱讀 393評(píng)論 2 6

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