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

Ric*_*ata 11 android android-architecture-components

我一直在测试Livedata和AAC.

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

哪一个是最好的,何时应该使用另一个?

Tom*_*kis 16

核心区别在于ObservableField<T>不能识别生命周期,因此不能进行任何自动订阅管理.虽然LiveData<T>具有生命周期意识,但在生命周期中解决了许多令人头疼的订阅管理问题Activity/Fragment.

没有一种方法可以回答什么是最好用的.这是个人选择,但我建议LiveData<T>只是为了节省一些时间,避免潜在的崩溃.


祝好运.:)

  • 如果我的视图模型的值只能由用户对视图的操作(通过数据绑定)修改,该怎么办?不涉及数据订阅时,使用LiveData仍然有任何好处吗? (3认同)
  • 来自 Android 开发团队的一篇文章:“LiveData 具有生命周期感知能力,但这相对于可观察字段来说并不是一个巨大的优势,因为数据绑定已经检查视图何时处于活动状态” https://medium.com/androiddevelopers/android-数据绑定库从可观察字段到实时数据分两步-690a384218f2#:~:text=is%20lifecycle-aware%20but%20this%20is%20not%20a%20huge%20advantage%20with %20尊重%20到%20Observable%20Fields%20,因为当%20%20view%20处于%20活动状态时,%20Data%20Binding%20已经%20检查%20 (2认同)

Tej*_*ala 6

无论LiveDataObservable可交替使用。LiveData具有生命周期意识,因此只会通知“活动”的可观察对象。

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

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

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

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

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

我们可以选择自定义绑定以防万一,Observable这在某些情况下可能会有所帮助。

个人喜好是搭配LiveData。如果在绑定上需要一些自定义或更多控制,请选择Obervable