You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中viewModel by viewModels<ProductsVM>()的by关键字作用及代码原理

聊聊val viewModel by viewModels<ProductsVM>()里的by关键字和代码逻辑

一、by关键字的作用

在Kotlin中,by是委托属性的核心关键字,作用就是把属性的存取逻辑(get()/set())委托给另一个对象来实现,不用自己手动编写这部分代码。这里就是将viewModel属性的获取逻辑,交给viewModels()返回的委托对象处理。

二、代码的工作原理与执行过程

  • 第一步:viewModels()的角色
    viewModels()是Android Jetpack提供的扩展函数,它会返回一个专门管理ViewModel的委托对象,这个对象负责处理ViewModel的实例创建、生命周期绑定等工作。

  • 首次访问viewModel属性时

    1. 委托对象会先检查当前组件(Activity/Fragment)对应的ViewModelStore中,是否已经存在ProductsVM的实例;
    2. 如果存在,直接返回该实例,确保整个组件生命周期内ViewModel的唯一性;
    3. 如果不存在,就通过ViewModelProvider结合默认工厂类创建ProductsVM的新实例,将其存入ViewModelStore后再返回给调用者。
  • 后续访问viewModel属性时
    直接从ViewModelStore中取出已有的ProductsVM实例,不会重复创建,既节省资源又能保留之前的数据状态。

  • 生命周期绑定的核心
    ViewModelStore与组件的生命周期绑定,当组件因配置变更(如屏幕旋转)重建时,ViewModelStore中的实例不会被销毁,新组件实例可以直接获取到原有的ViewModel,从而保留业务数据不丢失。


内容的提问来源于stack exchange,提问作者cluster1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:29:58