android開源框架21-23Glide

Glide 重點

生命周期管理 和緩存

with

  1. 對于activity的:以onstart為例
  • 會新建2個空白fragment(androidx的fragment;app的fragment),用于監(jiān)聽生命周期函數(shù)。
  • 當監(jiān)聽到變化的時候,會調(diào)用ActivityFragmentLifeCycle(實現(xiàn)了LifeCycle)的onstart方法,這里是個集合,遍歷調(diào)用執(zhí)行onstart
  • LifecycleListener 在RequestManager里面實現(xiàn)的,這里再去分發(fā)調(diào)用Glide里面的其他的xxtarget類
  • 注意:其中fragment那里的創(chuàng)建 可以參考,用先存入集合再調(diào)用begintransaction comitallowingstateloss 來保證fragment不被重復(fù)創(chuàng)建,還用handler 移除集合 來保證不會重建,因為消息是在handler的等待隊列里面的,要handler來把他放到執(zhí)行隊列里面。
  1. 對于沒有界面的:
  • 用的applicationcontext,和整個程序一樣的生命周期。
  1. with流程
  • 空白fragment(app+androidx)-->ActivityFragmentLifecycle實現(xiàn)lifecycle-->LifecycleListener-->RequestManager實現(xiàn)LifecycleListener-->glide里面其余的 ImageViewTarget、DefaultConnectivity...
  • ApplicationLifecycle 實現(xiàn)Lifecycle -->操作LifecycleListener

緩存分析

  1. 先調(diào)用活動緩存
    當前界面顯示的都在活動緩存里面,生命周期的ondestory的時候 再把緩存數(shù)據(jù)全部放入LRU緩存
  2. 再調(diào)用內(nèi)存LRU緩存
    需要用的時候會把數(shù)據(jù)放入活動緩存,刪掉LRU里面的對應(yīng)緩存
  3. 再調(diào)用本地LRU緩存 J 安卓之神寫的 DiskLRU緩存
    參考的LRU緩存,需要的時候復(fù)制數(shù)據(jù)到活動緩存,不會刪掉本地的
  4. 再網(wǎng)上取或者drawable本地取
    先存入本地LRU緩存,用的時候再走活動緩存

整體簡化主線流程 glide11 的url版本 主要into

Glide構(gòu)建
-->with:給每個RequestManager綁定一個空白fragment管理生命周期(分支:application無頁面)
-->into:Request對象的構(gòu)建:請求、寬、高、采樣...
-->請求之前 先檢測緩存
-->Engine緩存機制的檢測:先檢測活動緩存ActiveResources、再檢測內(nèi)存緩存LruResourceCache 如果命中任意一級緩存則回調(diào)直接顯示
-->沒有緩存,則在EnginJob構(gòu)建異步任務(wù)
-->xxtask:執(zhí)行Request之前,先檢測DiskCache本地磁盤緩存
-->如果沒有磁盤緩存,通過網(wǎng)絡(luò)請求,返回輸入流inputstream
-->解析輸入流,進行采樣壓縮,得到Bitmap;這里有很多跳轉(zhuǎn)中轉(zhuǎn)包裝的過程
-->Bitmap轉(zhuǎn)換為Drawable
-->構(gòu)建磁盤緩存DiskCache
-->構(gòu)建內(nèi)存緩存ActiveResource
-->回到ImageViewTarget 子類 DrawableImageViewTarget顯示圖片

看源碼思路

  1. 第一次看:先看下別的博客的流程,有個大概概念
  2. 第二次看:先走主線流程,埋下伏筆
    接口的地方,一步步跳轉(zhuǎn)進去找到實現(xiàn)即可。
  3. 第三次看:重點主線流程,關(guān)注下支線
  4. 第四次看:如果主線清晰了,再分析支線,不清晰則繼續(xù)第四次....
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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