Jetpack Hilt学习总结

232 阅读1分钟

Hilt 通过为项目中的每个 Android 类提供容器并自动管理其生命周期,提供了一种在应用中使用 DI(依赖项注入)的标准方法,基于dagger开发,主要实现在android场景的具体应用。

关于依赖注入

依赖注入简单描述就是由外部构建实例

  • 带参数的构造函数
data class Student(val id:Long, val name:String)

val sudent = Student(1L, "a")
  • 工厂模式
val factory = ComputerFactory()
val computer = factory.newComputer()

Hilt具体使用

hilt使用注解的方式自动注入

@HiltAndroidApp
class ExampleApplication:Application()

生成的这一 Hilt 组件会附加到 Application 对象的生命周期,并为其提供依赖项。此外,它也是应用的父组件,这意味着,其他组件可以访问它提供的依赖项。

Hilt通过为被依赖类的构造函数添加@Inject注解,来告知Hilt如何提供该类的实例

class Computer @Inject constructor() {
    fun powerUp() {}
    fun shutdown() {}
}
//MainActivity
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject lateinit var computer: Computer
    override fun onCreate(savedInstanceState: Bundle?) {...}
}

Hilt 可以为带有 @AndroidEntryPoint 注解的其他 Android 类提供依赖项,支持:

  • ViewModel(通过使用 @HiltViewModel
@HiltViewModel
class ExampleViewModel @Inject constructor(
  private val savedStateHandle: SavedStateHandle,
  private val repository: ExampleRepository
) : ViewModel() {}
  • Activity
  • Fragment
  • View
  • Service

模块

@Module
@InstallIn(SingletonComponent::class)
object AppDataStoreModule {
    @Provides
    @Singleton
    fun provideDataStore(@ApplicationContext context: Context): DataStore<Preferences> =
        context.dataStore
}
val Context.dataStore by preferencesDataStore(name = Constant.DATA_STORE_NAME)

//使用
@HiltViewModel
class ExampleViewModel @Inject constructor(
  private val dataStore: DataStore<Preferences>
) : ViewModel() {}