Jetpack ViewModel

private val deviceViewModel: IDeviceViewModel by viewModels<DeviceViewModel>()

这句代码是 Jetpack ViewModelFragment 或 Activity 中的标准用法,它的作用是 创建并获取 ViewModel 实例,同时确保 ViewModel 的生命周期与 UI 组件保持一致。

  • private val deviceViewModel:定义一个 私有的、不可变的 变量 deviceViewModel,用于引用 ViewModel 实例。
  • IDeviceViewModel:表示 deviceViewModel接口类型,意味着 DeviceViewModel 可能实现了 IDeviceViewModel 接口,使用接口可以实现更好的依赖注入和抽象化设计。
  • by viewModels<DeviceViewModel>()
    • viewModels<T>()Jetpack ViewModel 库提供的委托,用于 懒加载(Lazy Initialization)ViewModel。
    • 这个 viewModels<DeviceViewModel>() 会自动创建 DeviceViewModel 的实例,并在 FragmentActivity 重新创建时(如屏幕旋转)保持 ViewModel 不变

适用场景:

  • 适用于 FragmentActivity 中获取 ViewModel 实例,而 不需要手动管理 ViewModel 的创建和生命周期

等效代码(不使用 by viewModels

如果不用 by viewModels,可以这样写:

private val deviceViewModel: DeviceViewModel by lazy {
    ViewModelProvider(this).get(DeviceViewModel::class.java)
}

viewModels<T>() 方式更加简洁、安全,推荐在 FragmentActivity 中使用。

如果是在 Fragment 中,并且 ViewModel 需要 跨 Fragment 共享,可以使用 activityViewModels<T>()

private val sharedViewModel: DeviceViewModel by activityViewModels()

这样 ViewModel 就会与 Activity 共享,使多个 Fragment 访问相同的 ViewModel 数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值