ViewModel源码阅读指南,音视频开发进阶指南pdf

本文详细解析了ViewModel的创建流程,重点分析了`ViewModelProvider.get()`方法,探讨了为何ViewModel能实现数据持久化。同时,文章阐述了ViewModel与`onSavedInstanceState()`的关系,指出ActivityThread在数据恢复中的作用。最后,作者强调了深入研究基础和关键技术对成为优秀Android开发者的重要性。
摘要由CSDN通过智能技术生成

ViewModel的创建流程

不要将ViewModel想的多么神秘,它就是空类,唯一的作用,就是将你的对象能够挂上ViewModelStore的Map中。new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(TimerViewModel.class)一般我们直接使用这种方式获取一个ViewModel对象,想一下为什么不选择直接传入一个ViewModel对象?

ViewModelProvider.get()

这里有两个重载的方法,一个不带key另一个则是带key。带key的那个公开的原因是为了KeyedFactory服务,而不带key则会用canonicalName生成一个默认key。为什么要这么设计呢?因为带key可以为同一个ViewModel创建不同的实例,否则一个ViewModel只能创建一个实例。下面我们以带key的重载方法为例

  1. 先从ViewModelStore中获取,获取到了则返回ViewModel对象
  2. 判断当前是哪种Factory,并调用对应的create方法创建对象

为什么ViewModel可以做到存储数据的效果

这里的核心就在于Acitivity的onRetainNonConfigurationInstance()可以意外销毁的Activity中数据保存到内存中,那么是谁持有呢?当然是ActivityThread,因为它的生命周期与进程是相同,另外Activity也是它创建,所以恢复引用也比较方便。那么又是怎么恢复的呢?在Activity.attach()的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值