当前位置: 首页 > news >正文

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生命周期内如何存在

http://www.xdnf.cn/news/183709.html

相关文章:

  • 【算法笔记】贪心算法
  • Charles 抓包入门教程
  • 代码随想录算法训练营第60期第二十天打卡
  • 详细图解 Path-SAM2: Transfer SAM2 for digital pathology semantic segmentation
  • git每次push都要输入用户名和密码很繁琐,只在第一次输入之后都不需要的解决方法
  • 使用PHP对接印度股票市场数据
  • 睿享会丨走进西安御品轩
  • 代码随想录第28天:动态规划1
  • 每日c/c++题 备战蓝桥杯(P2392 kkksc03考前临时抱佛脚)
  • 若依/RuoYi 内置功能
  • tensor 的连续性 与 contiguous() 方法
  • 全星APQP软件系统:驱动芯片半导体行业研发管理迈向高效与合规新高度
  • 远程通信历史上为什么电话网络从模拟信号转向了数字信号?
  • Super Sample Tasker 学习-1
  • disruptor-spring-boot-start版本优化升级
  • LeetCode 每日一题 2025/4/21-2025/4/27
  • C++初阶-模板初阶
  • 杭电oj(1008、1012、1013、1014、1017)题解
  • 【文心快码】确实有点东西!
  • Redis 通用命令与keyspace
  • element-ui dropdown 组件源码分享
  • QML中的色彩应用
  • 调度算法的模拟及应用
  • 接口测试详解
  • electron-vite 应用打包自定义图标不显示问题
  • 28-29【动手学深度学习】批量归一化 + ResNet
  • Java线程池详解
  • 2024年12月GESP 图形化 一级考级真题——飞行的小猫
  • Linux的例行性工作(crontab)
  • 码蹄杯——tips