其他
在 Android 和 Hilt 中限定作用域
组件层次结构 https://developer.android.google.cn/training/dependency-injection/hilt-android#component-hierarchy
注意: 默认情况下,Hilt 中的绑定都未限定作用域。这些绑定不属于任何组件,并且可以在整个项目中被访问。每次被请求都会提供该类型的不同实例。当您将绑定的作用域限定为某个组件时,它会限制您使用该绑定的范围以及该类型可以具有的依赖项。
在 Android 中限定作用域
class ExampleActivity : AppCompatActivity() {
private val analyticsAdapter = AnalyticsAdapter()
...
}
@ActivityScoped
class AnalyticsAdapter @Inject constructor() { ... }
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
@Inject lateinit var analyticsAdapter: AnalyticsAdapter
}
组件层次结构 https://developer.android.google.cn/training/dependency-injection/hilt-android#component-hierarchy
更改系统设置后,您将获得一个新的 AnalyticsAdapter 和 MainActivity 实例
通过 ViewModel 限定作用域
组件架构中的 ViewModel https://developer.android.google.cn/topic/libraries/architecture/viewmodel
class AnalyticsAdapter() { ... }
class ExampleViewModel() : ViewModel() {
val analyticsAdapter = AnalyticsAdapter()
}
class ExampleActivity : AppCompatActivity() {
private val viewModel: ExampleViewModel by viewModels()
private val analyticsAdapter = viewModel.analyticsAdapter
}
@ActivityRetainedScoped
class AnalyticsAdapter @Inject constructor() { ... }
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
@Inject lateinit var analyticsAdapter: AnalyticsAdapter
}
通过使用 ViewModel 或者 Hilt 中的 ActivityRetainedScope 注解,您可以在系统设置更改后获得相同的实例
文档 | 使用 Hilt 注入 ViewModel 对象 https://developer.android.google.cn/training/dependency-injection/hilt-jetpack#viewmodels
class AnalyticsAdapter @Inject constructor() { ... }
class ExampleViewModel @ViewModelInject constructor(
private val analyticsAdapter: AnalyticsAdapter
) : ViewModel() { ... }
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
private val viewModel: ExampleViewModel by viewModels()
private val analyticsAdapter = viewModel.analyticsAdapter
}
全部可用作用域 https://developer.android.google.cn/training/dependency-injection/hilt-android#component-scopes
对比 Hilt 及 ViewModel 限定作用域
LifecyclerOwner https://developer.android.google.cn/reference/androidx/lifecycle/LifecycleOwner Jetpack Navigation 库 https://developer.android.google.cn/guide/navigation/navigation-getting-started NavGraph https://developer.android.google.cn/reference/androidx/navigation/fragment/NavHostFragment
使用 Hilt 注入 ViewModel
推荐阅读