首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你真的了解ViewModel设计思想吗?

ViewModelStore类是一个存储ViewModel容器。当UI控制创建时,系统会为其创建一个ViewModelStore实例。...当 UI控制器销毁时,系统会销毁其对应ViewModelStore实例。 ViewModel创建时,会将自身注册到其所在ViewModelStore实例中。...创建ViewModel销毁,都与Lifecycle有关,这样就让ViewModel具有以下特性: 生命周期感知: ViewModel生命周期感知,它会自动跟踪UI控制生命周期,并在适当时候进行清理...为什么需要ViewModelStore ViewModelStore是用于管理ViewModel实例生命周期一种机制。...ViewModelStore通过管理ViewModel实例生命周期,确保在重新创建UI时,旧ViewModel实例被正确地销毁,而新ViewModel实例被正确地创建

17510
您找到你想要的搜索结果了吗?
是的
没有找到

Jetpack源码解析---ViewModel基本使用及源码解析

简单来说:ViewModel是以关联生命周期方式存储和管理UI相关数据类,即使configuration发生改变(例如屏幕旋转),数据仍然可以存在不会销毁....图中展示了当一个Activity经过屏幕旋转后生命周期状态改变,右侧则是ViewModel生命周期状态。...我们可以看到ViewModel生命周期并不会跟随着Activity生命周期变化而变化,虽然ViewModel是由该Activity创建。...到这里ViewModel基本使用方式我们已经了解了,接下来我们分析一下它具体是怎么实现?...到这里VM创建过程就差不多了,而我们发现他并没有和生命周期有什么相关东西,或者说VM是怎样保证数据不被销毁呢?

82620

“终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!

简单理解就是,ViewModel为UI层提供数据。官方文档定义如下: ViewModel 以注重生命周期方式存储和管理界面相关数据。...1.2 特点 具体地,相比于Presenter,ViewModel有以下特点: 1.2.1 生命周期长于Activity ViewModel最重要特点是 生命周期长于Activity。...每个 Fragment 都有自己生命周期,而不受另一个 Fragment 生命周期影响。如果一个 Fragment 替换另一个 Fragment,界面将继续工作而没有任何问题。...继续见名知意:ViewModelStoreOwner——ViewModel存储器拥有者;ViewModelStore——ViewModel存储器,用来存ViewModel地方;Factory——创建ViewModel...4.1 使用场景 在很久之前一篇文章《Activity生命周期》中有提到: onSaveInstanceState调用时机: 当某个activity变得“容易”被系统销毁时,该activityonSaveInstanceState

1.7K10

Architecture Components ViewModel控制

前言 作为MVVM 系列第二篇,我们来看一下之前提出第二个问题,就是ViewModel是如果控制生命周期,并且保证在一定范围内唯一性。...简单看一下,代码不难理解,先赋值成员变量,之后是查看ViewModelStore中是否有传入类型ViewModel,没有的话就通过传入工厂类创建一个新ViewModel 添加到ViewModelStore...这样ViewModel实现过程就差不多结束了,还是利用Fragment方式去获取生命周期,然后再利用工厂类创建ViewModel。...总结 同样使用给宿主添加Fragment方式获取宿主生命周期,只不过现在只获取销毁函数就可以。...然后在HoldFragment中持有一个集合用于保存当前宿主ViewModel,在onDestory函数中调用集合clear方法,间接调用到ViewModelonCleared方法,实现生命周期控制

78690

Android从零开始搭建MVVM架构(3)——ViewModel

ViewModel类是被设计用来以可感知生命周期方式存储和管理 UI 相关数据,ViewModel中数据会一直存活即使 activity configuration发生变化。...ViewModel 生命周期是贯穿整个 activity 生命周期,包括 Activity 因旋转造成创建,直到 Activity 真正意义上销毁后才会结束。...之前做法是接口回调,需要统一在 Activity 里管理,并且不可避免 fragment 之间还得互相持有对方引用。...至此ViewModelProviders of 做了哪些事情呢: 1、初始化了ViewModelProvider内部维护了 用于创建 VM Factory,和用户存放 VM ViewModelStore...Google lifecycle 与 ViewModel 全都是利用 fragment 一些特性去玩这些生命周期.

67120

Android Jetpack 组件之 ViewModel 详解

ViewModel生命周期 ViewModel源码分析 什么是ViewModelStore 什么是ViewModelStoreOwner 如何简化Fragment之间通信 ViewModel 生命周期...} 此时,ViewModel创建好了,那 VIewModel 是如何被创建呢,mFactory 具体实现这里是默认 AndroidViewModelFactory,其创建时通过反射获取构造方法创建...什么是 ViewModelStore ViewModelStore 主要是用来保存当设备配置发生变化时候保存 ViewModel 状态,如当前界面被重新创建或者销毁等,对应 ViewModelStore...记住一点,使用 ViewModel 进行两个 Fragment 之间通信时候,创建 ViewModel 使用其宿主 Activity 创建,实现过程如下,首先创建一个 ViewModel 如下: public...每个 Fragment 都有自己生命周期,可以随意替换和移除都不会互相影响另一个 Fragment 正常工作。

1.2K10

【AAC 系列四】深入理解架构组件:ViewModel

ViewModel 被设计管理跟 UI 相关数据, 并且能够感知生命周期;另外 ViewModel 能够在配置改变情况下让数据得以保留。...ViewModel 生命周期 我们在前面提到过,ViewModel 并不会因为 Activity 配置改变销毁而一起销毁,那么 ViewModel 生命周期到底是怎么样呢?...都构建了一个唯一 key , 并通过这个 key 尝试去一个叫做 ViewModelStore 类获取 ViewModel 实例,如果为null ,那么会通过 Factory 去创建,并把新实例存入到...再仔细思考一下,get 方法会优先从这个 ViewModelStore 中去拿,那么理论上只要保证 ViewModelStore 这个类在配置变化过程中没有被销毁,那么就可以保证我们创建 ViewModel...这里传入了一个 通过 ViewModelStores 类创建 ViewModelStore,并且传入了 fragment,一定有蹊跷。

87740

ViewModel三问—阿里真题

如果看过上一篇文章小伙伴应该都有所了解,ViewModel是MVVM架构一个层级,用来联系View和model之间关系。而我们今天要说就是官方出一个框架——ViewModel。...“ViewModel 类旨在以注重生命周期方式存储和管理界面相关数据 ” 官方是这么介绍,这里面有两个信息: 注重生命周期方式。...在ViewModel组件被设计出来之前,MVVM又是怎么实现ViewModel这一层级呢? 其实就是自己编写类,然后通过接口,内部依赖实现View和数据双向绑定。...然后实例创建出来会保存到一个ViewModelStore容器里面,其实也就是一个集合类,这个ViewModelStore 类其实就是保存在界面上那个实例,而我们ViewModel就是里面的一个集合类子元素...最后在界面销毁时候,会去执行ViewModelStoreclear方法,去清除集合里面的ViewModel数据。

70110

使用 Architecture Component 实现 MVVM 正确姿势

一、MVVM 之初体验 网上关于 MVVM 介绍非常多,这里不再赘述,直接看一个例子,用直观代码感受一下用 MVVM 开发,是一种什么样感受 class MvvmViewModel : ViewModel...答案肯定是否定,但是 Android 给我提供了一套组件,可以让我们更方便地用 MVVM 模式开发,减少我们重复造轮子工作量 ViewModel ViewModel 是官方提供,用于管理 UI...在 MVVM 中,ViewModel 充当 View 和 Model 之前数据中转和逻辑处理角色 image.png ViewModel 生命周期 ViewModel 生命周期创建 ViewModel...ViewModel 实例化传参 有时候我们希望给创建 ViewModel 传递参数,这里分场景看一下: 在 Fragment 或者 Activity 中使用 ViewModel 注意事项 通过 ViewModelProvider...,如果要使用 LiveData 实现非粘性消息(observe() 时候不接收之前赋给 LiveData 值),有各种 workaround 方式,具体可以移步至另一篇文章:LiveData

75920

Andorid-JetPack-ViewModel组件

1.什么是ViewModel 具备宿主生命周期感知能力数据存储组件 ViewModel保存数据,在页面因 配置变更导致页面销毁 重建之后依然是存在 配置变更:横竖屏切换、分辨率调整、权限变更、系统字体样式变更...); ViewModelProvider本质是从传递进去ViewModelStore获取实例,如果没有,则利用factory去创建 3.1 ViewModelProvider创建 public class...> T create(@NonNull Class modelClass); } 就是说,当我们获取ViewModel实例时候,如果在ViewModelStore中获取不到,就会用Factory...= null) { // TODO: log a warning. } } //3.如果不是就通过工厂创建一个viewModel...作为Key, 这就是在ViewModelStore中存储Key,Value是我们ViewModel.class对象 我们知道了ViewModel是从ViewModelStore中获取,那既然想做到

1.7K30

由浅入深,详解ViewModel那些事

关于 ViewModel 生命周期,具体如下图所示: 虽然 ViewModel 非常好用,但 ViewModel 也不是万能,其只能避免配置变更时避免状态丢失。...而 ViewModelStore 是负责维护我们 ViewModel 实例具体类,内部有一个 map 合集,用于保存我们创建所有 ViewModel ,并对外提供了 clear() 方法,以 便于非配置变更时清除缓存...如果当前已创建,则直接使用;反之则调用我们 ViewModel工厂 create() 方法创建 ViewModel创建完成后,并将其保存到 ViewModelStore 中。...我们插入点也就在于此开始。 我们暂时先不关注如何还原状态,而是先搞清楚 SavedStateRegistry 是什么,它又是从哪来而传递。...即 SavedStateRegistry 创造以及状态保存,肯定也是 经过我们Activity转发处理(不然它自己怎么处理呢)。

75140

Jetpack系列——ViewModel

()方法和onRestoreInstanceState()方法实现,有了ViewModel,就可以用更简单方法保存数据了。...ViewModel独立于组件配置变化,也就是说,当发生特殊情况导致Activity重新执行某些生命周期时,ViewModel生命周期并不会发生变化。...下图是ViewModel与Activity生命周期对应关系: [1240] 从上图可以看出,ViewModel会伴随着Activity整个生命周期,直到Activity执行onDestroy()方法之后...[1240] 上述代码中也介绍了最重要一个点,那就是ViewModel实例创建,首先需要创建一个ViewModelProvider类对象,其构造方法中需要传入Activity实例,在androidx...get()方法,可以看出ViewModelStore类就是使用HashMap将ViewModel与其key(class名称)保存了起来。

58410
领券