LiveData的优势

LiveData 具有生命周期感知能力,观察时会传入对应的LifecycleOwner。这种感知能力可确保LiveData 仅更新处于活跃生命周期状态的应用组件观察者

应用组件观察者可以很安全的观察数据变化(绑定声明周期,自动绑定和移除),不用担心内存泄漏等问题。

该组件的优势:

  • 确保界面符合数据状态

  • LiveData 遵循观察者模式。当观察的数据发生变化时,LiveData 会通知 [Observer]对象,实现被动更新,不需要主动去调用viewmodel获取数据。

  • 不会发生内存泄漏

  • 观察者会绑定到 [Lifecycle],可以获取到应用组件的声明周期,当销毁时自动取消订阅。

  • 不会因 Activity 停止而导致崩溃

  • 如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件(也是通过LifecycleOwner实现的)

  • 数据始终保持最新状态

  • 如果生命周期变为非活跃状态,它会在再次变为活跃状态时接收最新的数据。如果看源码会发现Observe有一个version版本号,而LiveData也有一个版本号是否调用观察者通知数据变化就是比对这两个版本号是否一致,ViewModel会保存LiveData实例,当重建时LiveData版本号还是之前的版本号,而观察者此时重走OnCreate为0,所以可以收到上一次的数据变化通知

  • 适当的配置更改

  • 如果由于配置更改(如设备旋转)而重新创建了 Activity 或 Fragment,它会立即接收最新的可用数据。(ViewModel通过在OnDestory的时候保存到Configure属性中,当attach的时候取出这个属性里面的Viewodel赋值给组件,当Activity/Fragment重新get获取的时候拿到的就是上次的ViewModel)

  • 共享资源

  • 可以使用单例模式扩展 [LiveData] 对象以封装系统服务,以便在应用中共享它们。LiveData 对象连接到系统服务一次,然后需要相应资源的任何观察者只需观察 LiveData 对象。这个具体场景就是搭配Room数据库返回LiveData的结合,之前需要手动去做逻辑变更,但现在唯一数据源是数据库只需要更改数据库即可,不需要再Activity中处理逻辑改变数据源,符合上一篇文章说到的单项数据流原则。

原文链接:LiveData的优势 - 掘金 (juejin.cn)

你可能感兴趣的:(android)