Edited at

【Android】MutableLiveDataとObservableFieldの違い

DataBindingの際にどっちを使えばいいのかわからなくなって調べたときのメモです:angel:


MutableLiveDataの特徴

// こんなやつ

val animal = MutableLiveData<String>()

ActivityやFragmentのライフサイクルに応じて、ほぼ自動で購読管理をしてくれる。

→意図しないクラッシュ防ぐことができる


LiveData is an observable data holder class. Unlike a regular observable, LiveData is lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, fragments, or services.


公式ドキュメント#livedata


ObservableFieldの特徴

// こんなやつ

val animal = ObservableField<String>()

DataBindingをするときに使う。

ライフサイクルには対応しておらず、購読管理を自動ですることはできない。


違いについて

両方ともDataBindingに使えるオブジェクトですが、ActivityやFragmentのライフサイクルに対応することができるかどうかが大きな違いのようでした。

どちらを使うべきかはケースバイケースですが、基本的にはこれまで通りObservableFieldを使いつつ、ライフサイクルと蜜に連携する必要があるときにはMutableLiveDataを使おうかなと思っています。

 

Googleの公式ドキュメントでは


In Android Studio version 3.1 and higher, you can replace observable fields with LiveData objects in your data binding code.


のように、ObservableFieldMutableLiveDataに置き換えることができるよと言っているので、GoogleはLiveData推しなのかもしれません。


参考

android - ObservableField or LiveData? Which one is the best? - Stack Overflow

公式ドキュメント#livedata

LiveData について勘違いしていたことをいくつか - Qiita