美文网首页
ViewModel相关

ViewModel相关

作者: Infinity_空 | 来源:发表于2022-02-10 16:02 被阅读0次
  1. 解决问题:1. Activity的销毁和重建过程中的数据保存。2. 逻辑层持有UI层管理网络请求,避免内存泄漏。

  2. ViewModel与Activity/Fragment的生命周期绑定,不会出现内存泄露的问题。

  3. ViewModelStoreOwner是一个接口,唯一的方法是getViewModelStore,由Activity/Fragment实现。

  4. 当Activity/Fragment因为配置触发重建时,ViewModel的数据不会丢失,依然可以获取。原因:因为创建ViewModel时,都会去ViewModelStore中寻找对应的ViewModel,如果没有找到ViewModel就会新创建一个,并保存在ViewModelStore中。所以当触发重建时,在ViewModelStore中可以获取到对应的ViewModel。而ViewModelStore存储在NonConfigurationInstances中,该对象不会受Activity销毁重建的影响,所以ViewModel的数据可以保存。(NonConfigurationInstances这个对象存储在ActivityThread中,参考Activity启动流程,该对象不会受到Activity销毁和重建的影响)

  5. ViewModel的销毁,通过监听Activity的onDestroy事件,判断如果是正常销毁,就clear ViewModelStore,如果是因为修改配置导致的销毁,那就不会clear

  6. Activity和Fragment可以通过ViewModel共享数据的原理是什么?
    1. 因为Fragment声明ViewModel时,可以设置ViewModelStore为Fragment的ViewModelStore或者是requireActivity()的ViewModelStore,如果是使用的requireActivity的ViewModelStore,意味着跟Activity使用的是同一个ViewModelStore,而且因为key相同,所以使用的实际上是同一个ViewModel实例,所以可以进行数据共享。

参考资料:
https://juejin.cn/post/6915012483421831175
https://juejin.cn/post/6873356946896846856
https://juejin.cn/post/6951244272553181197

相关文章

  • Jetpack组件之ViewModel实现原理

    提纲 ViewModel是什么 ViewModel的优势 ViewModel基本用法 ViewModel相关方法说...

  • Android ViewModel介绍

    ViewModel是什么 ViewModel用来存储和管理UI相关的数据。 ViewModel的功能 用来存储和管...

  • ViewModel详解

    ViewModel是用来存储和管理UI相关数据的。 1、实现ViewModel ViewModel中一般使用Liv...

  • ViewModel简介

    ViewModel概述 ViewModel类旨在以生命周期意识的方式存储和管理与UI相关的数据。ViewModel...

  • 【Android Jetpack教程】ViewModel原理分析

    ViewModel的定义:ViewModel旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel本...

  • AAC---ViewModel

    ViewModel介绍 ViewModel是用来保存并且管理与LifeCycle以及UI相关数据的数据结构。Vie...

  • Android Jetpack架构组件(四)—ViewModel

    一、ViewModel简介 ViewModel:是以感知生命周期的形式来存储和管理视图相关的数据。 ViewMod...

  • Android Architecture Components之

    一 Why ViewModel? 根据官方文档我们知道,ViewModel是用来存储或者管理一些跟UI相关的数据,...

  • Android ViewModel

    Android ViewModel ViewModel 类旨在以注重生命周期的方式存储和管理界面的相关数据, vi...

  • Architecture -- ViewModel

    1). 简介 ViewModel类旨在以生命周期意识的方式存储和管理UI相关数据。 ViewModel类允许数据在...

网友评论

      本文标题:ViewModel相关

      本文链接:https://www.haomeiwen.com/subject/hkzakrtx.html