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 而不必担心泄漏,当它们被销毁时,它们将立即取消订阅。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值