DataBindingの際にどっちを使えばいいのかわからなくなって調べたときのメモです
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.
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.
のように、ObservableField
をMutableLiveData
に置き換えることができるよと言っているので、GoogleはLiveData推しなのかもしれません。
参考
android - ObservableField or LiveData? Which one is the best? - Stack Overflow
公式ドキュメント#livedata
LiveData について勘違いしていたことをいくつか - Qiita