本篇文章對Glide最新4.11.0版本做一個(gè)宏觀解析,目的是把握下Glide的大框架哆键,有了宏觀了解之后掘托,再剖析細(xì)節(jié)就比較容易了。
源碼解析:
Glide.with(this).load(url).into(imageView);
按如上代碼籍嘹,總結(jié)流程圖和類圖來從執(zhí)行流程和類關(guān)系兩個(gè)維度來解析下Glide的基礎(chǔ)框架闪盔。
一、流程圖
1.1 with
with主要干兩件事:
圖片加載綁定對應(yīng)頁面生命周期辱士;
生命周期分為application 和 非application兩種泪掀。分別通過ApplicationLifecycle、ActivityFragmentLifecycle來管理生命周期颂碘。初始化RequestManager;
1.2 load
流程以加載String url為例异赫。
load主要干一件事情:
- 通過RequestManager初始化RequestBuilder。確認(rèn)加載的資源類型以及一些參數(shù)的初始化头岔,為后續(xù)into做準(zhǔn)備塔拳。
1.3 into
into過程
into主要干了三件事: - 封裝并發(fā)起request。
- request獲取圖片數(shù)據(jù)峡竣。
- 將圖片顯示到View上靠抑。
request獲取圖片邏輯:
優(yōu)先級:當(dāng)前正在使用的緩存 > LruCache > 網(wǎng)絡(luò)/磁盤
二、類圖
這里只梳理下核心類的關(guān)系
簡單總結(jié)下理解:
Glide.with(this).load(url).into(imageView);
Glide是一個(gè)單例的調(diào)用入口類适掰。
with:初始化RequestManager颂碧,綁定生命周期。
load:加載資源并初始化RequestBuilder类浪。
into:由RequestBuilder構(gòu)建Request和Target交由RequestManager去處理载城。
核心功能全部交給RequestManager來處理:
通過with、load费就、into三板斧后诉瓦,給到RequestManager的工作內(nèi)容:
- 綁定對應(yīng)頁面生命周期。
- 處理Request獲取圖片資源力细。
- 將圖片資源加載到Target對應(yīng)的目標(biāo)控件上垦搬。
RequestManager左膀右臂TargetTracker、RequestTracker艳汽,前者負(fù)責(zé)綁定頁面生命周期猴贰,后者負(fù)責(zé)剩下兩項(xiàng)工作。
Request通過Engine來管理圖片加載河狐,按:活躍內(nèi)存>LruCache>網(wǎng)絡(luò)/磁盤 優(yōu)先級獲取圖片資源米绕。具體圖片獲取由對應(yīng)的DataFetcher來處理瑟捣,然后交給DecodeJob去做圖片的解碼。最后通過回調(diào)返回給Target去設(shè)置圖片栅干。