Hilt 是 Google 基于 Dagger 封裝的 Android 專屬依賴注入(DI)框架,顯著簡化了依賴管理流程,提升代碼可維護性和可測試性。以下是核心要點及使用指南:
dagger2:
Dagger 2 原理和使用-CSDN博客
Hilt vs Dagger2:Android 依賴注入框架對比-CSDN博客
Hilt 和 AOP(面向切面編程) 關系 -CSDN博客
?一、核心概念與優勢
-
簡化 Dagger 配置
-
自動生成組件和作用域,減少模板代碼(如手動創建 Dagger 組件)27。
-
內置 Android 類支持(如?
Application
、Activity
),通過注解即可注入依賴38。
-
-
生命周期管理
-
為不同 Android 類預定義組件和作用域(如?
SingletonComponent
?對應應用全局,ActivityComponent
?綁定 Activity 生命周期),自動釋放資源。
-
-
與 Jetpack 深度集成
-
支持 ViewModel、Room、WorkManager 等 Jetpack 組件,通過?
@HiltViewModel
?等注解無縫注入。
-
二、基礎使用步驟
-
添加依賴
在項目級?build.gradle
?中引入插件:
buildscript {dependencies {classpath "com.google.dagger:hilt-android-gradle-plugin:2.44"}
}
在模塊級?build.gradle
?中啟用:
plugins {id 'kotlin-kapt'id 'dagger.hilt.android.plugin'
}
dependencies {implementation "com.google.dagger:hilt-android:2.44"kapt "com.google.dagger:hilt-compiler:2.44"
}
初始化 Hilt
在自定義?Application
?類添加注解:
@HiltAndroidApp
class MyApp : Application()
聲明依賴提供方式
-
構造函數注入(推薦):
-
class UserRepository @Inject constructor() { ... }
?????????模塊注入(用于接口或第三方庫):
@Module
@InstallIn(SingletonComponent::class)
object AppModule {@Provides@Singletonfun provideRetrofit(): Retrofit { ... }
}
?注入依賴到 Android 類
使用?@AndroidEntryPoint
?標記支持類(如 Activity/Fragment),并通過?@Inject
?注入字段:
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {@Inject lateinit var userRepo: UserRepository
}
三、與 Jetpack 組件集成
-
ViewModel 注入
使用?@HiltViewModel
?注解,依賴通過構造函數注入:
@HiltViewModel
class MyViewModel @Inject constructor(private val apiService: ApiService
) : ViewModel() { ... }
-
Activity/Fragment 中通過?
by viewModels()
?獲取實例27。 -
Room 數據庫注入
通過模塊提供 Database 和 Dao 實例:
@Module
@InstallIn(SingletonComponent::class)
object DatabaseModule {@Provides@Singletonfun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {return Room.databaseBuilder(context, AppDatabase::class.java, "db").build()}
}
:cite[2]
四、作用域與組件對照表
Hilt 通過預定義組件管理依賴生命周期,以下為常用作用域:
作用域注解 | 綁定組件 | 生命周期范圍 |
---|---|---|
@Singleton | SingletonComponent | 應用全局 |
@ActivityRetainedScoped | ActivityRetainedComponent | 配置更改后仍存活 |
@ActivityScoped | ActivityComponent | Activity |
@ViewModelScoped | ViewModelComponent | ViewModel |
@FragmentScoped | FragmentComponent | Fragment |
示例:
@ActivityScoped
class AuthManager @Inject constructor() { ... } // 隨 Activity 銷毀釋放
五、常見問題解決
-
注入私有字段報錯
Hilt 不支持注入私有字段,需改為?public
?或?protected
3。 -
作用域沖突
確保模塊安裝的組件(@InstallIn
)與依賴的作用域匹配(如 Activity 級模塊不可提供全局單例)4。 -
多模塊依賴
編譯模塊需傳遞包含所有 Hilt 模塊和注入類3。
總結
Hilt 通過標準化 DI 實現,解決了 Android 開發中手動管理依賴的復雜性。其核心價值在于:
-
??降低門檻:無需深入 Dagger 即可實現高效依賴管理。
-
??生命周期安全:自動綁定組件作用域,避免內存泄漏。
-
??生態兼容:深度整合 Jetpack,適合現代 Android 架構。
建議從官方示例入手,逐步實踐模塊化注入場景。完整文檔參考:Hilt 官方指南。