JetPack之ViewModel最新源码详细分析

本文详尽分析了JetPack ViewModel的最新源码,解释了其在组件状态变化时如何保持界面数据不变。ViewModel作为MVVM架构的重要组成部分,通过与LiveData配合,确保数据在屏幕旋转等场景下得以保留。文章介绍了构造ViewModel的过程,包括构造函数的变化、Factory的使用,以及不同方式的实例化。此外,还探讨了ViewModel如何在Activity的生命周期中保存和恢复数据,特别是在状态改变时的数据管理机制。
摘要由CSDN通过智能技术生成

本文会基于最新版ViewModel使用方法与源码进行详细分析,从注册到实现ViewModel界面数据如何保存与管理全部涉及。

**

简介:

**ViewModel是JetPack系列库之一,它用来对组件的界面数据进行管理,且当组件的状态发生改变时数据依然留存。

优点:1.当所依赖组件的状态发生改变时,例如屏幕旋转等,界面数据不会发生改变
2.实现MVVM架构的基础,在日常开发中,ViewModel就是MVVM架构的VM层,它相当于MVP架构的present,我们可以将业务逻辑以及数据交互的部分放入ViewModel中。

源码分析:

版本:viewmodel:1.1.1
此处使用的示例代码与livedata源码分析的相同,不影响流程分析

首先构造一个继承于ViewModel的类
在这里插入图片描述
接着创建一个factory 实例传入ViewModelProvider(this,factory )中去并调用get方法将我们的ViewModel作为参数传入。
此处需要注意的是在以前的版本中直接通过 ViewModelProviders.of(this).get()方法来完成这个操作的。在最新的版本中已经取消了of方法,并且构造方法必须要传入2个参数
在这里插入图片描述
查看ViewModelProvider的构造方法可看出构造ViewModelProvider时必须传入2个参数才行,其中第一个参数为ViewModelStore,第二个参数为factory,
ViewModelStore用来存储和管理ViewModelfactory则用来对ViewModel进行实例化。此时构建ViewModelProvider时传入的参数为所依赖的组件的ViewModelStore,也就是说,我们通过组件的ViewModelStore来对ViewModel进行存储和管理。
在这里插入图片描述

其中factory需要我们在构造的时候进行传入,ViewModelProvider给我们提供了3种实例化的方法,分别是简单工厂模式构造,通过反射构造实例,以及我们自己实现factory构造实例。

当我们使用ViewModelProvider.NewInstanceFactory()构造实例时,查看源码可看出,它实现了Factory 接口,并且在其内部的create方法中会调用我们在之前get方法中传入的viewmodelnewInstance方法。这个方法需我们自己在viewmodel中去实现,用来返回viewmodel实例,如果实例化出错则会抛出异常

   public static class NewInstanceFactory implements Factory {

        @SuppressWarnings("ClassNewInstance")
        @NonNull
        @Override
        public <T extends ViewModel> T create(@NonN
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值