IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> ViewModel的共享(上) -> 正文阅读

[移动开发]ViewModel的共享(上)

1. 什么是ViewModel

我们先来试着了解一下,为什么叫做“ViewModel”这个名字?(以下是个人的解读)将ViewModel就可以拆成 “View”和“Model”。

  • View:就是我们看到的UI界面。例如常见的实现了 lifecycleOwner 的Fragment、activity、自定义View等等。View应该专注于处理UI界面的展示。
  • Model:就是数据的获取类。例如:网络请求、数据库读取等等。
  • ViewModel:就是介于View和Model这两个之间存在的一个组件,连接着View和Model。负责存储和处理UI界面需要的所有数据。数据来源来自Model,在ViewModel中对数据进行处理,View会监听ViewModel中数据的变化从而进行UI上的响应。所以ViewModel绝不会,也不应该访问视图层次结构(例如视图绑定对象)或存储对 activity 或 fragment 的引用。

2. ViewModel的生命周期

ViewModel 对象存在的时间范围是获取 ViewModel 时传递给 ViewModelProvider 的 Lifecycle。ViewModel 将一直留在内存中,直到限定其存在时间范围的 Lifecycle 永久消失:对于 activity,是在 activity 完成时;而对于 fragment,是在 fragment 分离时。(因为 ViewModel 存储在 activity/fragment 中的 ViewModelStore 中)。
其实可以认为存在的时间范围是从您首次请求 ViewModel 直到 LifecycleOwner 完成并销毁。
所以在使用ViewModel的时候我们最好是在实现了 LifecycleOwner 的对象上使用,防止出现OOM。
下面借鉴以下官方的图:
在这里插入图片描述

3. 怎么使用ViewModel

MVVM的出现,MVP也渐渐被MVVM所替代,这里的MVVM就指的是包含ViewModel的。在使用ViewModel的同时,通常也会将 LiveData 搭配使用。

  • LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
  • 当 LifecycleOwner 处于活动状态时,才会通知此观察者有关包装数据的修改。即 状态必须是STARTED 以上的活跃状态,才会收到通知。
  • 当 处于 DESTROYED 状态时,将添加了 Lifecycle 的观察者将被自动删除。LifecycleOwner 可以安全地观察 LiveData 而不必担心泄漏,当它们被销毁时,它们将立即取消订阅。
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:55:38  更:2022-08-06 10:59:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:48:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码