Android ViewModel原理简要

按时间顺序调用如下

1、ActivityThread调用performLaunchActivity,触发Activity的attach方法,其中入参NoneConfigrationInstance是由ActivityClientRecord持有,每一个Activity都有一个ActivityClientRecord,存储在ActivityThread中

2、NoneConfigrationInstance中有一个ViewModelStore,而Activity的基类ComponentActivity实现了ViewModelStore接口,getViewModelStore方法实际获取的就是NoneConfigratonInstance中的ViewModelStore

3、ViewModelStore内使用Map存储ViewModel,Key为ViewModel名称+前后缀

4、通过ViewModelProvider(ViewModelStoreOwner).get(ViewModel.class)方法,向ConponentActivity中的ViewModelStore添加ViewModel,如果不存在则反射创建添加

5、ComponentActivity持有Lifecycle,当触发Destroy时判断是否是ConfigChange,如果不是,则清除ViewModelStore中的ViewModel,如果是配置引起的Destroy,不清除ViewModel

6、如果是配置引起的重新创建,会保留ViewModelStore中的ViewModel,然后执行onRetainNonConfigurationInstance,重新从NonConfigurationInstance中获取ViewModelStore

总结,通过以上学习我们可以了解

1、为什么Activity意外销毁,ViewModel能恢复数据

2、ViewModel在整个ActivityClientRecord生命周期内如何存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值