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

创建我自己的ViewModelStore来控制ViewModel生命周期

创建自己的ViewModelStore是一种在Android开发中管理ViewModel生命周期的方式。ViewModel是一种用于存储和管理与界面相关的数据的类,它的存在可以帮助我们解决一些配置变化(如屏幕旋转)导致的数据丢失问题。

ViewModelStore是一个存储ViewModel实例的容器,通过使用ViewModelStore,我们可以自己控制ViewModel的创建和销毁时机,从而更好地管理ViewModel的生命周期。

在创建自己的ViewModelStore时,我们可以按照以下步骤进行操作:

  1. 创建一个继承自ViewModelStore的类,例如自定义的MyViewModelStore。
  2. 在Activity或Fragment中,创建一个对应的MyViewModelStore实例。
代码语言:txt
复制
MyViewModelStore myViewModelStore = new MyViewModelStore();
  1. 在需要使用ViewModel的地方,通过MyViewModelStore的get方法获取ViewModel实例。
代码语言:txt
复制
MyViewModel myViewModel = ViewModelProvider(myViewModelStore).get(MyViewModel.class);
  1. 当Activity或Fragment被销毁时,需要手动调用MyViewModelStore的clear方法来销毁所有的ViewModel实例。
代码语言:txt
复制
myViewModelStore.clear();

通过创建自己的ViewModelStore,我们可以更加灵活地控制ViewModel的生命周期,并确保数据的持久性。这种方式适用于需要自定义ViewModel生命周期管理的场景,例如多个Fragment共享同一个ViewModel实例等。

腾讯云相关产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

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

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

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

    84220

    “终于懂了“系列: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.8K10

    Architecture Components ViewModel控制

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

    82090

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

    71220

    ViewModel三问—阿里真题

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

    72210

    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,一定有蹊跷。

    92540

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

    78220

    由浅入深,详解ViewModel那些事

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

    81740

    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

    JetPack组件学习ViewModel

    上面是利用反射创建了一个带有参数ViewModel。默认创建是无参实例 3.通过get传入对应ViewmodelClass对象即可。...答:1.第一次创建 首先会从对应Activity中NoLastConfigure获取activity取出对应ViewModelStore这个时候由于是第一次所以是null, 于是只能new一个ViewModelStore...1.当调用performDestory时候创建一个Configure类取出viewmodelStore中如果没有直接取到从上一次configure中取,创建完configure后保存 到record...ViewModel数据变化这样耦合会降低一些 2.当配置失效比如屏幕旋转会销毁重建Activity,数据虽说可以通过onSavedInstance传递,但是数据量并不能太大。...但是ViewModel是系统原生支持我们可以直接获取到上次销毁ViewModel实例数据还在其中 3.具有生命周期可以自动管理防止泄漏,可通过onCleared告知持有该ViewModelV层销毁

    63010
    领券