ViewModel 跟 Activity 之间到底是什么关系?

ViewModelProvider通过ViewModelStore和Factory管理ViewModel的创建与存储。Factory负责实例化ViewModel,而ViewModelStore则保存这些实例。activity作为ViewModelStoreOwner,持有ViewModelStore,从而实现了ViewModel与activity的绑定。这种设计允许activity和ViewModel之间的生命周期关联,确保数据在配置变更时得以保留。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


ViewModelProvider(activity)[YourViewModel::class.java]�我们日常都是如此获得ViewModel的,那你知道ViewModelProvider到底是怎么获得ViewModel的吗?ViewModel又是如何跟activity/fragment之间绑定的?上图整理了相关类之间的关系。

  • ViewModelProvider 是如何对外提供 ViewModel的

ViewModelProvier 中有两个重要成员变量:ViewModelStore 和 Factory。Factory 负责创建 ViewModel,ViewModelStore 负责存储 ViewModel。ViewModleProvier 就是通过这两个成员变量来对外提供 ViewModel

  • ViewModel 是如何跟activity/fragment之间绑定的

activity 直接继承了ViewModelStoreOwner、HasDefaultViewModelProviderFactory 这两个接口,换句话来说acivity本身就持有了ViewModelStore 和 Factory。ViewModelStore中存储 ViewModel 的 hashtagMap 是activity 成员变量的成员变量,就这样 activity 和 ViewModel就绑定到了一起。
总结:

  1. Factory、 ViewModelStore、ViewModelStoreOwner 源码里面的命名规则其实就已经把中间的逻辑关系描述清除了。
  2. 由于只能继承一个父类,但是可以继承多个接口。这里 activity 通过继承 ViewModelStoreOwner 接口,接口中又提供了 getViewModelStore():ViewModelStore 方法,间接让 activity 持有了ViewModelStore。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值