之前國慶假期想着閒着也是閒着,就想着來深入瞭解下幾個常用的開源庫😁😁,看下其實現原理和源碼,進行總結並輸出成一份PDF資源。現已總結了 EventBus、ARouter、LeakCanary、Glide、Coil、Retrofit、OkHttp 等幾個。
主要整理成了以下十個模塊:
三方庫源碼筆記(1)-EventBus 源碼詳解
三方庫源碼筆記(2)-EventBus 自己實現一個?
三方庫源碼筆記(3)-ARouter 源碼詳解
三方庫源碼筆記(4)-ARouter 自己實現一個?
三方庫源碼筆記(5)-LeakCanary 源碼詳解
三方庫源碼筆記(6)-LeakCanary 擴展閱讀
三方庫源碼筆記(7)-超詳細的 Retrofit 源碼解 析
三方庫源碼筆記(8)-Retrofit 與 LiveData 的 結合使用
三方庫源碼筆記(9)-超詳細的 Glide 源碼詳解
三方庫源碼筆記(10)-Glide 你可能不知道的知 識點
1.EventBus 源碼詳解
我們知道,EventBus 在有消息被髮送出來時,可以直接爲我們回調該消息的所有監聽方法,回調操作是通過反射 method.invoke 來實現的。那麼 EventBus 在回調之前也必須先拿到所有的監聽方法纔行,這樣才知道該消息類型對應什麼監聽方法以及對應多少監聽方法。
主要內容:
- 註冊
- 發送消息
- 解除註冊
- 註解處理器
- 一些坑
2.自己實現一個EventBus
對於一個優秀的第三方庫,開發者除了要學會如何使用外,更有難度的用法就是去了解實現原理、懂得如何改造甚至自己實現。接下來就來自己動手實現一個 EventBus,不求功能多齊全,就來實現簡單的註冊、反註冊、發送消息、接收消息這些功能即可😁😁
主要內容:
- 需要做什麼
- 註解處理器
- EasyEventBus
3.ARouter 源碼詳解
路由框架在大型項目中比較常見,特別是在項目中擁有多個 moudle 的時候。爲了實現組件化,多個 module 間的通信就不能直接以模塊間的引用來實現,此時就需要依賴路由框架來實現模塊間的通信和解耦:sunglasses:
而 ARouter 就是一個用於幫助 Android App 進行組件化改造的框架,支持模塊間的路由、通信、解耦。
主要內容:
- 初始化
- 跳轉到 Activity
- 跳轉到 Activity 並注入參數
- 控制反轉
- 攔截器
- 註解處理器
4.自己實現一個ARouter
對於一個優秀的第三方庫,開發者除了要學會如何使用外,更有難度的用法就是去了解實現原理、懂得如何改造甚至自己實現。接下來就自己動手實現一個路由框架,因爲自己實現的目的不在於做到和 ARouter 一樣功能完善,而只是一個練手項目,目的是在於加深對 ARouter 的原理理解,所以自己的自定義實現就叫做 EasyArouter 吧 😁😁
主要內容:
- 前置準備
- 註解處理器
- EasyRouter
5.LeakCanary 源碼詳解
LeakCanary是由 Square 公司開源的用於 Android 的內存泄漏檢測工具,可以幫助開發者發現內存泄露情況並且找出泄露源頭,有助於減少 OutOfMemoryError
情況的發生。在目前的應用開發中也算作是性能優化的一個重要實現途徑,很多面試官在考察性能優化時都會問到 LeakCanary 的實現原理。
主要內容:
- 支持的內存泄露類型
- 初始化
- ObjectWatcher:檢測任意對象
- ActivityDestroyWatcher:檢測 Activity
- FragmentDestroyWatcher:檢測 Fragment
- ViewModelClearedWatcher:檢測 ViewModel
- 檢測到內存泄露後的流程
6.LeakCanary 擴展閱讀
Java 的一個很顯著的優點就在於內存自動回收機制,Java 通過垃圾收集器(Garbage Collection,GC)來自動管理內存的回收過程,而無需開發者來主動釋放內存。這種自動化行爲有效地節省了開發人員的開發成本,但也讓一些開發者誤以爲 Java 就不存在內存泄漏的問題了,或者是誤認爲內存泄露應該是 GC 或者 JVM 層面來關心和解決的問題。這種想法是不正確的,因爲內存泄露大多時候是由於程序本身存在缺陷而導致的,GC 和 JVM 並無法精準理解程序的實現初衷,所以還是需要由開發人員來主動解決問題。
主要內容:
- 內存泄露和內存溢出
- 內存管理
- 常見的內存泄露
7.超詳細的 Retrofit 源碼解析
Retrofit 也是現在 Android 應用開發中的標配之一了,今天就來對 Retrofit 進行一次(自我感覺的)全面的源碼解析。
主要內容:
- Retrofit.create()
- ServiceMethod
- HttpServiceMethod
- OkHttpCall
- API 方法是如何解析的?
- ResponseBody 是如何映射爲 UserBean 的?
- Call 是如何替換爲 Observable 的?
- 整個數據轉換流程總結
- 如何實現以 Kotlin 協程的方式來調用?
- Retrofit 對 Android 平臺做了什麼特殊支持?
8.Retrofit 與 LiveData 的 結合使用
我們在搭建項目的網絡請求框架的時候,一個重要的設計環節就是要避免由於網絡請求結果的異步延時回調導致內存泄漏情況的發生,所以在使用 RxJava 的時候我們往往是會搭配 RxLifecycle 來一起使用。而 Google 推出的 Jetpack 組件一個很大的亮點就是提供了生命週期安全保障的 LiveData。
LiveData 是基於觀察者模式來實現的,也完全符合我們在進行網絡請求時的使用習慣。所以,本篇文章就來動手實現一個 LiveDataCallAdapter,即實現以下方式的網絡請求回調。
主要內容:
- 基礎定義
- LiveDataCallAdapter
9.超詳細的 Glide 源碼詳解
Glide 的源碼有點複雜,所以換個思路來看源碼:以小點來劃分,每個小點只包含 Glide 實現某個功能或目的時所涉及的流程,以此來簡化理解難度,通過整合多個小的功能點來把控住 Glide 大的實現方向。
主要內容:
- 前置準備
- 如何監聽生命週期
- 怎麼注入 Fragment
- 如何啓動加載圖片的任務
- 加載圖片的具體流程
- 如何分辨不同的加載類型
- 一共包含幾個線程池
- 如何自定義網絡請求庫
- 內存清理機制
10.關於Glide 你可能不知道的知識點
主要內容:
- 利用 AppGlideModule 實現默認配置
- 自定義網絡請求組件
- 實現圖片加載進度監聽
- 自定義磁盤緩存 key
- 如何直接拿到圖片
- Glide 如何實現網絡監聽
完整目錄:
現在都說互聯網寒冬,其實只要自身技術能力夠強,咱們就不怕!
資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,以上資源均免費分享,以上內容均放在了開源項目:【github】 中已收錄,大家可以自行獲取(或者關注主頁掃描加微信獲取)。