圖片載入框架Picasso原始碼分析
第一部分:程式碼整理
最初始程式碼是全部放在一個目錄裡,我根據功能把其分成不同的模組。
每個模組只要研究明白1個類檔案就足夠明白框架做的事情了。
最後再整合一下,整個框架就非常容易明白了,先來看一下分模組後的目錄,然後從上到下逐個模組分析:
第二部分Action:
主要使用場景:圖片載入成功或者失敗後呼叫。
Action(Picasso,Request ,......):傳入 大量引數進行初始化
onComplete(): 圖片載入成功後呼叫的方法,一般是用給ImageView新增載入成功後的圖片。
error():圖片載入失敗後呼叫的方法,一般用來給ImageView設定載入錯誤時的圖片。
cancel():取消載入圖片的方法
getTarget():主要就是返回Target,Target類在最後再介紹。
getRequest(): 返回Request物件,Request主要儲存請求相關的引數。在request模組再詳細介紹。
getKey():返回key
isCancelled():是否取消
willReplay():載入失敗後是否重新載入
getMemoryPolicy():獲取記憶體載入策略,在policy模組詳細介紹
getNetworkPolicy():獲取網路載入策略,在policy模組詳細介紹
getPicasso():獲取Picasso物件
Action 的子類基本都是繼承上述方法做一些差異化的操作,就不一一介紹了。
第三部分Cache:
簡介:使用鍵值對儲存<url,Bitmap>.
get()、set()方法主要是存取操作
size()目前佔用記憶體大小
maxsize():設定最大佔用大小
clear():清除所有Bitmap
clearKeyUri():根據url清除Bitmap
LruCache實現了Cache的所有方法。
第四部分 Downloader:
簡介: 下載圖片的部分,此部分主要是封裝一下okhttp的下載功能。
Downloader只有兩個方法:load()和shutdown(),很好理解:載入和關閉。
我們再來看看其實現類OkHttp3Downloader:
不同的初始化引數,
可以選擇本地載入,
也可以選擇網路載入,網路載入還配有配置OkHttpclient
load()方法就是呼叫okhttp去下載圖片,然後返回Response
第五部分 Policy:
簡介:此部分主要介紹載入的策略,包括網路載入和記憶體載入。
NetworkPolicy方法如下圖:
shouldReadFromDiskCache():是否應該從硬碟讀
shouldWriteToDiskCache():是否應該從硬碟寫
MemoryPolicy:
和NetworkPolicy類似,把硬碟改成記憶體而已。
是否從記憶體讀
是否往記憶體寫。
第六部分 Request:
簡介:Request主要就是組織請求的引數,包括圖片顯示大小,ScaleType、旋轉角度、移動距離、URI、resourceId等引數。
RequestCreator是Request的輔助類,主要是配置Request.Buider的引數
DeferredRequestCreator是在圖片draw之前做的一些操作或者跟window的attached或者unattached狀態監聽
第七部分 RequestHandler:
介紹:載入不同路徑的圖片資源的不同處理方式。
父類RequestHandler:load()載入圖片,一起重試,計算縮放等方法。
其他類都是子類,方法基本一樣,實現方式不同。例如ResourceRequestHandler,載入resource資源,返回Result具體方法如下圖所示:
第八部分 Stats:
簡介:
統計的一些資訊。比如說查詢圖片Hit多少次,Miss多少次,Decode多少次、
Transform多少次,以及下載多少次等統計資訊。再次不再進行過多介紹
第九部分 Utils:
簡介:工具類,都是具體業務方面的實現,有興趣自己檢視即可。
第十部分 Picasso:
簡介:封裝了所有業務,也是對外的主要入口。
未完待續,有時間有心情就續,沒時間就算了
相關文章
- 圖片載入框架Picasso - 原始碼分析框架原始碼
- Android圖片載入框架Picasso原始碼分析(基於Picasso 2.71828)Android框架原始碼
- Android圖片載入庫Picasso原始碼分析Android原始碼
- Android 圖片載入框架 Picasso 基本使用和原始碼完全解析Android框架原始碼
- Picasso 載入圖片的流程分析
- 圖片載入框架-Picasso最詳細的使用指南框架
- 圖片載入利器之Picasso(五)查漏補缺
- 影片直播原始碼,載入gif圖片原始碼
- 詳談高大上的圖片載入框架Glide -原始碼篇框架IDE原始碼
- Architecture(3)Picasso原始碼分析原始碼
- 簡單說說我最常用的圖片載入庫 Picasso
- Android 圖片載入框架Android框架
- Google推薦的圖片載入庫Glide於Picasso比較GoIDE
- android glide圖片載入框架AndroidIDE框架
- 詳談高大上的圖片載入框架Glide -原始碼篇| 掘金技術徵文框架IDE原始碼
- 小說APP原始碼的圖片載入方式,懶載入和預載入的實現APP原始碼
- javascript圖片懶載入與預載入的分析JavaScript
- Android ImageLoader框架之圖片載入與載入策略Android框架
- 如何實現一個圖片載入框架框架
- jQuery圖片預載入程式碼jQuery
- picasso框架框架
- Android圖片載入框架Fresco使用詳解Android框架
- Picasso-原始碼解析(二)原始碼
- Picasso-原始碼解析(三)原始碼
- Picasso-原始碼解析(一)原始碼
- 圖片下載框架概述框架
- Android Volley 原始碼解析(三),圖片載入的實現Android原始碼
- Android 載入大圖片時報OOM的解決方案(原始碼)AndroidOOM原始碼
- Android 框架練成 教你打造高效的圖片載入框架Android框架
- Android:這是一份全面 & 詳細的圖片載入庫Glide原始碼分析AndroidIDE原始碼
- JVM類載入器-原始碼分析JVM原始碼
- Glide 原始碼分析(一):圖片壓縮IDE原始碼
- Flutter 圖片載入Flutter
- 圖片懶載入
- 預載入圖片
- 圖片載入事件事件
- 載入圖片方式
- Android圖片載入的框架Fresco使用詳解Android框架