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

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

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

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

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

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

    85020

    “终于懂了“系列: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变得“容易”被系统销毁时,该activity的onSaveInstanceState

    1.8K10

    Architecture Components ViewModel的控制。

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

    82990

    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 的一些特性去玩这些生命周期.

    73320

    ViewModel三问—阿里真题

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

    72810

    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.3K10

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

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

    94940

    使用 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

    78920

    由浅入深,详解ViewModel的那些事

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

    85340

    Android经典面试题之ViewModel生命周期穿透的3种黑科技实现

    大家好,我是稳稳,一个曾经励志用技术改变世界,现在为随时失业做准备的中年奶爸程序员,与你分享生活和学习的点滴。 连续熬夜真是吃不消啊!加油!加油! 引言:为什么开发者需要ViewModel?...而ViewModel的诞生,通过“生命周期穿透”能力,彻底解决了配置变更导致的数据丢失问题。 但它的实现原理究竟是什么?本文将揭开其底层三大黑科技。...这个Fragment的setRetainInstance(true)属性,使其在Activity重建时仍存活于内存中,其内部通过ViewModelStore对象缓存所有ViewModel实例。...()),而Bundle仅在临时重建时有效 性能对比:ViewModel通过内存缓存避免序列化开销,性能提升约30倍 Q2:如何实现自定义生命周期的ViewModel?...跨屏幕旋转:HolderFragment + ViewModelStore机制 2. 跨组件通信:ViewModelStoreOwner的多级作用域控制 3.

    6010

    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.8K30
    领券