圖片加載框架Picasso源碼分析

第一部分:代碼整理

最初始代碼是全部放在一個目錄里念链,我根據(jù)功能把其分成不同的模塊。
每個模塊只要研究明白1個類文件就足夠明白框架做的事情了缰泡。
最后再整合一下烧颖,整個框架就非常容易明白了弱左,先來看一下分模塊后的目錄,然后從上到下逐個模塊分析:
Picasso模塊劃分

第二部分Action:

主要使用場景:圖片加載成功或者失敗后調(diào)用炕淮。
Action(Picasso拆火,Request ,......):傳入 大量參數(shù)進行初始化

onComplete(): 圖片加載成功后調(diào)用的方法涂圆,一般是用給ImageView添加加載成功后的圖片们镜。

error():圖片加載失敗后調(diào)用的方法,一般用來給ImageView設置加載錯誤時的圖片润歉。

cancel():取消加載圖片的方法

getTarget():主要就是返回Target模狭,Target類在最后再介紹。

getRequest(): 返回Request對象卡辰,Request主要保存請求相關的參數(shù)胞皱。在request模塊再詳細介紹。

getKey():返回key
isCancelled():是否取消
willReplay():加載失敗后是否重新加載

getMemoryPolicy():獲取內(nèi)存加載策略九妈,在policy模塊詳細介紹
getNetworkPolicy():獲取網(wǎng)絡加載策略反砌,在policy模塊詳細介紹

getPicasso():獲取Picasso對象

Action 的子類基本都是繼承上述方法做一些差異化的操作,就不一一介紹了萌朱。
Action及其子類
Action內(nèi)部方法列表

第三部分Cache:

簡介:使用鍵值對存儲<url,Bitmap>.

get()宴树、set()方法主要是存取操作
size()目前占用內(nèi)存大小
maxsize():設置最大占用大小
clear():清除所有Bitmap
clearKeyUri():根據(jù)url清除Bitmap

LruCache實現(xiàn)了Cache的所有方法。


Cache所有方法

第四部分 Downloader:

 簡介: 下載圖片的部分晶疼,此部分主要是封裝一下okhttp的下載功能酒贬。

Downloader只有兩個方法:load()和shutdown(),很好理解:加載和關閉翠霍。

我們再來看看其實現(xiàn)類OkHttp3Downloader:
  不同的初始化參數(shù)锭吨,
      可以選擇本地加載,
      也可以選擇網(wǎng)絡加載寒匙,網(wǎng)絡加載還配有配置OkHttpclient
  load()方法就是調(diào)用okhttp去下載圖片零如,然后返回Response
Downloader

OkHttp3Downloader

第五部分 Policy:

簡介:此部分主要介紹加載的策略,包括網(wǎng)絡加載和內(nèi)存加載。
NetworkPolicy方法如下圖:
    shouldReadFromDiskCache():是否應該從硬盤讀
    shouldWriteToDiskCache():是否應該從硬盤寫
MemoryPolicy:
    和NetworkPolicy類似考蕾,把硬盤改成內(nèi)存而已祸憋。
      是否從內(nèi)存讀
      是否往內(nèi)存寫。
Policy

第六部分 Request:

簡介:Request主要就是組織請求的參數(shù)肖卧,包括圖片顯示大小蚯窥,ScaleType、旋轉(zhuǎn)角度塞帐、移動距離拦赠、URI、resourceId等參數(shù)壁榕。

    RequestCreator是Request的輔助類矛紫,主要是配置Request.Buider的參數(shù)

  DeferredRequestCreator是在圖片draw之前做的一些操作或者跟window的attached或者unattached狀態(tài)監(jiān)聽
Request模塊
Request

RequestCreator

DeferredRequestCreator

第七部分 RequestHandler:
介紹:加載不同路徑的圖片資源的不同處理方式赎瞎。
父類RequestHandler:load()加載圖片牌里,一起重試,計算縮放等方法务甥。
其他類都是子類牡辽,方法基本一樣,實現(xiàn)方式不同敞临。例如ResourceRequestHandler态辛,加載resource資源,返回Result具體方法如下圖所示:

RequestHandler模塊
RequestHandler
ResourceRequestHandler

第八部分 Stats:

簡介:
  統(tǒng)計的一些信息挺尿。比如說查找圖片Hit多少次奏黑,Miss多少次,Decode多少次、
  Transform多少次编矾,以及下載多少次等統(tǒng)計信息熟史。再次不再進行過多介紹
Stats

第九部分 Utils:

簡介:工具類,都是具體業(yè)務方面的實現(xiàn)窄俏,有興趣自己查看即可蹂匹。

第十部分 Picasso:

  簡介:封裝了所有業(yè)務,也是對外的主要入口凹蜈。
Picasso

未完待續(xù)荔仁,有時間有心情就續(xù)贡这,沒時間就算了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子亥啦,更是在濱河造成了極大的恐慌,老刑警劉巖凤价,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莺褒,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機鼠渺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門鸭巴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拦盹,你說我怎么就攤上這事鹃祖。” “怎么了普舆?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵恬口,是天一觀的道長。 經(jīng)常有香客問我沼侣,道長祖能,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任蛾洛,我火速辦了婚禮养铸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轧膘。我一直安慰自己钞螟,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布谎碍。 她就那樣靜靜地躺著鳞滨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟆淀。 梳的紋絲不亂的頭發(fā)上拯啦,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音熔任,去河邊找鬼褒链。 笑死,一個胖子當著我的面吹牛笋敞,可吹牛的內(nèi)容都是我干的碱蒙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼夯巷,長吁一口氣:“原來是場噩夢啊……” “哼赛惩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起趁餐,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤喷兼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后后雷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體季惯,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吠各,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勉抓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贾漏。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖藕筋,靈堂內(nèi)的尸體忽然破棺而出纵散,到底是詐尸還是另有隱情,我是刑警寧澤隐圾,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布伍掀,位于F島的核電站,受9級特大地震影響暇藏,放射性物質(zhì)發(fā)生泄漏蜜笤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一盐碱、第九天 我趴在偏房一處隱蔽的房頂上張望把兔。 院中可真熱鬧,春花似錦甸各、人聲如沸垛贤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至某饰,卻和暖如春儒恋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黔漂。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工诫尽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炬守。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓牧嫉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親减途。 傳聞我的和親對象是個殘疾皇子酣藻,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348