当前位置: 首页 > article >正文

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 数据。


http://www.kler.cn/a/536491.html

相关文章:

  • android 适配 api 35(android 15) 遇到的问题
  • 解锁高效 Web 开发新姿势:Open WebUI 安装指南
  • QUIC 与 UDP 关系
  • intra-mart实现简易登录页面笔记
  • Linux 内核模块 | 加载 / 添加 / 删除 / 优先级
  • Zookeeper是如何解决脑裂问题的?
  • grafana面板配置opentsdb
  • 大模型deepseek-r1 本地快速搭建
  • 3D展示已成趋势,哪些产品适合3D交互展示?
  • 不用调试器,如何定位“Hard Fault”?
  • 用户点击商品埋点的实现方案
  • 跨平台App开发,有哪些编程语言和工具,比较一下优劣势?
  • STM32的HAL库开发-通用定时器输入捕获实验
  • 【电商系统架构的深度剖析与技术选型】
  • 基于SpringBoot养老院平台系统功能实现五
  • MySQL三大日志——binlog、redoLog、undoLog详解
  • RAG:知识库参数设置
  • .NET Framework和.NET Core的区别
  • 深度学习入门:搭建你的第一个神经网络
  • 群晖NAS如何通过WebDAV和内网穿透实现Joplin笔记远程同步
  • Python----Python高级(并发编程:协程Coroutines,事件循环,Task对象,协程间通信,协程同步,将协程分布到线程池/进程池中)
  • 如何在Windows 8.1上配置并使用Hyper-V功能
  • Qwen2-VL-2B-Instruct 模型 RK3576 板端部署过程
  • 821 简答题整理【笔记】
  • CosyVoice /F5-TTS /GPT-SoVITS /Fish-Speech 开源语音克隆与文本转语音(TTS)项目的对比整理
  • 探索前端框架的未来:Svelte 的崛起