ObservableField还是LiveData?哪一个是最好的?

时间:2018-07-20 06:19:23

标签: android android-architecture-components

我一直在测试Livedata和AAC。

LiveData和ObservableField之间的核心区别是什么?

哪个是最好的,什么时候应该使用另一个?

3 个答案:

答案 0 :(得分:10)

核心区别在于ObservableField<T>不了解生命周期,因此不能进行任何自动订阅管理。 LiveData<T>具有生命周期意识,可以解决Activity/Fragment生命周期方面的订阅管理难题。

没有一种方法可以回答最佳使用方法。这是个人选择,但我建议您使用LiveData<T>只是为了节省一些时间并避免可能发生的崩溃。


祝好运。 :)

答案 1 :(得分:3)

LiveDataObservable都可以替代使用。 LiveData是生命周期感知的,因此将仅通知“活动”的可观察对象。

https://developer.android.com/topic/libraries/data-binding/architecture#livedata上引用官方文档

  

与实现可观察对象的对象(例如,可观察字段)不同,LiveData对象了解订阅者对数据更改的生命周期。此知识可带来许多好处,这些好处在使用LiveData的好处中进行了说明。在Android Studio 3.1及更高版本中,您可以在数据绑定代码中用LiveData对象替换可观察字段。

如前所述,两者都可以互换地用于UI绑定。 LiveData是一种快速的方法,但是如果您想对绑定进行更多控制,Obserable是一个不错的选择。

https://developer.android.com/topic/libraries/data-binding/architecture#observable-viewmodel上引用官方文档

  

在某些情况下,即使您失去了LiveData的生命周期管理功能,也可能更喜欢使用实现Observable接口的ViewModel组件而不是使用LiveData对象。使用实现Observable的ViewModel组件,可以更好地控制应用程序中的绑定适配器。例如,此模式使您可以在数据更改时更好地控制通知,它还允许您指定自定义方法来设置双向数据绑定中的属性值。

Observable的情况下,我们获得了一些用于自定义绑定的选项,这在某些情况下可能会有所帮助。

个人偏好是与LiveData一起使用。如果需要对绑定进行一些自定义或更多控制,请转到Obervable

答案 2 :(得分:2)

相似之处

  • 与数据绑定配合良好
  • 绑定视图在后台自动取消订阅
  • POJO类也可以订阅更改

差异

  • LiveData允许POJO订阅者了解生命周期。这意味着,如果您具有要在A更改时更新的属性B,则可以选择在附加视图处于非活动状态时不接收更新。这样可以节省资源。
  • ObservableField<T>的后台线程更新是立即的。 MutableLiveData.postData被延迟。
  • LiveData<T>ObservableField<T>的值始终可以为空,但是原始实现ObservableInt-Float-Boolean等则不能为空。
  • MutableLiveData<T>不需要在初始化时设置构造函数值。

何时使用什么

  • 当应用程序位于背景中时,您是否有外部事件可能触发ViewModel中的级联数据更改?您可能应该去LiveData
  • 是否需要立即在后台线程上更新值?使用可观察物

以上要求均没有?您都不会出错,但是ObservableField是一个更简单的类。

*)在保证get之后的set/postValue返回刚刚设置的值的意义上说是“立即”。当涉及到UI更新时,这些类型当然都不是立即可用的。