文章插圖

文章插圖
Dagger 和 Koin 無疑是 Android 中最流行的兩個依賴注入框架 。這兩個庫具有相同的用途,而且看起來非常相似,但它們在底層的工作方式卻非常不同 。
那么 Hilt 是什么呢?Hilt 是一個內部使用 Dagger 的庫,只是簡化了它的用法,因此我在這里所說的有關 Dagger 的內容也適用于 Hilt 。在本文中,我不會告訴您應該選擇哪個庫 。相反,我想向您展示它們的本質區別以及這些差異對您的應用造成的影響 。
Dagger
如果我們希望 Dagger 提供某個類的實例,我們要做的就是在構造函數中添加 @Inject 注解 。
此類包含創建 CompositeAdapter 類的實例所需的所有信息 。
在這個例子中,沒有任何區別 。Hilt 是一個內部使用 Dagger 的庫,我向你展示的類是由 Dagger 生成的 。如果您使用 Hilt,它確實為我們生成了一些額外的類,這些類簡化了 Dagger 的使用,并減少了我們需要編寫的樣板代碼的數量 。但核心部分保持不變 。
Koin 與 Dagger 以及 Hilt 相比,管理依賴項的方法完全不同 。要在 Koin 中注冊依賴項,我們不會使用任何注解,因為Koin不會生成任何代碼 。相反,我們必須為模塊提供工廠,這些模塊將用于創建項目中所需的每個類的實例 。
Koin 將這些工廠類的引用添加到 InstancesRegistry 類中,該類包含對我們編寫的所有工廠的引用 。
要獲得依賴關系,我們需要調用 get() (比如在一個工廠類中) 或者通過在 activities 或 fragments 中調用 inject() 委托屬性 ,從而懶加載 get() 。get()方法將查找為給定類型的類注冊工廠,并將其注入其中 。
Dagger 生成代碼來提供依賴,而 Koin 不生成代碼,這實際上帶來了一些影響 。
1. 錯誤處理
【android四大框架 android開源框架有哪些】因為Dagger 是一個編譯時依賴注入框架,如果我們忘記提供某些依賴,我們幾乎會立即知道我們的錯誤,因為我們的項目將構建失敗 。
例如,如果我們忘記向構造函數的 CompositeAdapter 中添加 @Inject 注解,并嘗試將其注入 fragment 中,則構建將失敗,并顯示適當的錯誤,確切地告訴我們出了什么問題 。
Koin 不生成任何代碼的優點是:它對我們的構建時間的影響要小得多 。Dagger 需要使用注解處理器來掃描代碼并生成適當的類 。這可能需要一些時間,可能會減慢我們的構建 。
3. 對運行時性能的影響
從另一方面來說,因為 Koin 在運行時解析依賴項,所以它的運行時性能稍差一些 。
總結
正如我在本文開始時所說的,我這里的目標不是告訴您要使用哪個庫 。我在兩個不同的大項目中都使用了 Koin 和 Dagger 。老實說,我認為選擇 Dagger 還是 Koin 并不重要,重要的是能夠讓你編寫干凈、簡單且易于單元測試的代碼 。我認為所有的庫:Koin,Dagger 和 Hilt 都達到了這個目的 。
所有這些庫都有自己的優勢,我希望了解它們在底層是如何工作的,能夠幫助您自己決定哪種庫最適合您的應用 。
最后
在這里我分享一份由大佬親自收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料
這些都是我現在閑暇時還會反復翻閱的精品資料 。里面對近幾年的大廠面試高頻知識點都有詳細的講解 。相信可以有效地幫助大家掌握知識、理解原理,幫助大家在未來取得一份不錯的答卷 。
- java安全權限框架哪個好 java系統安全架構設計
- JAVA測試框架 java如何編寫單元測試類
- 中國四大民間傳說有哪些 十分的經典
- 東方四大鬼宅故事 戴笠樓為什么又叫鬼宅
- 春節“新四大年俗”揭曉:集五福、云拜年、搶紅包、全家游
- 成人零基礎學英語該怎么學簡單生活交流 成人零基礎學英語該怎么學? 語言框架
- 卻會痛得撕心裂肺的四大星座 讓摩羯男撕心裂肺想你
- 傳入西歐的四大發明對西歐有促進作用的是什么 傳入西歐的四大發明對西歐有促進作用的是
- 四大名蛋 高郵咸蛋 四大名蛋的故事
- 夏季養生 消暑清熱四大方案
