我一直在测试Livedata和AAC。
LiveData和ObservableField之间的核心区别是什么?
哪个是最好的,什么时候应该使用另一个?
答案 0 :(得分:10)
核心区别在于ObservableField<T>
不了解生命周期,因此不能进行任何自动订阅管理。 LiveData<T>
具有生命周期意识,可以解决Activity/Fragment
生命周期方面的订阅管理难题。
没有一种方法可以回答最佳使用方法。这是个人选择,但我建议您使用LiveData<T>
只是为了节省一些时间并避免可能发生的崩溃。
答案 1 :(得分:3)
LiveData
和Observable
都可以替代使用。 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)
相似之处
差异
LiveData
允许POJO订阅者了解生命周期。这意味着,如果您具有要在A更改时更新的属性B,则可以选择在附加视图处于非活动状态时不接收更新。这样可以节省资源。ObservableField<T>
的后台线程更新是立即的。 MutableLiveData.postData
被延迟。LiveData<T>
和ObservableField<T>
的值始终可以为空,但是原始实现ObservableInt
,-Float
,-Boolean
等则不能为空。MutableLiveData<T>
不需要在初始化时设置构造函数值。何时使用什么
LiveData
以上要求均没有?您都不会出错,但是ObservableField
是一个更简单的类。
*)在保证get
之后的set/postValue
返回刚刚设置的值的意义上说是“立即”。当涉及到UI更新时,这些类型当然都不是立即可用的。