Hilt 新组件 | ViewModelComponent

本文介绍了 Hilt 的 ViewModelComponent,它遵循 ViewModel 的生命周期,并提供了一个更细粒度的作用域管理。ViewModelComponent 默认绑定 SavedStateHandle,允许在配置更改中保留状态。通过 @ViewModelScoped 注解,可以确保每个 ViewModel 实例拥有独立的依赖实例,而 @ActivityRetainedScoped 则用于共享同一界面中 ViewModel 的实例。理解这些组件和作用域对于优化 Android 应用的状态管理和依赖注入至关重要。
摘要由CSDN通过智能技术生成

ViewModelComponent 是一个 Hilt 组件层次结构 (Component hierarchy) 中的一员,它遵循 ViewModel 的生命周期,并可以限定类型的作用域到此组件上。

  • Hilt 组件层次结构 (Component hierarchy)
    https://developer.android.google.cn/training/dependency-injection/hilt-android#component-hierarchy

在 ViewModelComponent 添加到 Hilt 之前,ViewModel 类通过 ActivityRetainedComponent 创建和注入。因此,ViewModel 中的依赖项仅可以使用未限定作用域、或是将作用域限定到 SingletonComponent 或 ActivityRetainedComponent 中,被所有 ViewModel 共享实例的类型。

如果您的 App 每个页面都仅为一个 Activity,上述内容并不会成为问题,因为此情况中将类型的作用域限定为 ActivityRetainedComponent 意味着每个页面的 ViewModel 类都将获得该类型的不同实例。然而,每个页面仅为一个 Activity 并不适用于大多数 App。

此外,ActivityRetainedComponent 组件不会默认绑定 SavedStateHandle。

现在,您可以通过遵循 ViewModel 生命周期的 ViewModelComponent 组件来创建并注入 ViewModel。每一个 ViewModel 实例持有不同的 ViewModelComponent 实例,您可以使用 @ViewModelScoped 注解,将类型的作用域限定到该组件上。

ViewModelComponent 在精简版 Hilt 组件层次结构中的位置

ViewModelComponent 继承自 ActivityRetainedComponent,因此它的类型限定依赖于上层的 SingletonComponent 和 ActivityRetainedComponent。除此之外,ViewModelComponent 还默认绑定了一个与 ViewModel 关联的 SavedStateHandle。

  • SavedStateHandle
    https://developer.android.google.cn/reference/androidx/lifecycle/SavedStateHandle

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值