Существует несколько вопросов по Stackoverflow, связанных с различием между LiveData и ObservableField.Кроме того, я нашел несколько статей в Интернете на эту тему.Все они объясняют, что LiveData поддерживает жизненный цикл в отличие от ObservableField.Большинство из них также упоминают, что выгодно использовать LiveData вместо ObservableField, если компонент, такой как Activity или Fragment, наблюдает атрибут, поэтому нам не нужно отписываться.
Однако даже после прочтения всего этого,что мне до сих пор неясно, есть ли какое-либо преимущество использования LiveData над ObservableField для привязки данных.Например:
ViewModel:
class UserViewModel(user: User) : ViewModel {
val userName = ObservableField<String>(user.name) // Option 1
val userName = MutableLiveData<String>(user.name) // Option 2
}
Макет:
<layout>
<data>
<variable name="viewModel" type="com.example.UserViewModel" />
</data>
...
</layout>
Для варианта 2 мне также, конечно, придется использовать binding.setLifecycleOwner(activity)
.Давайте предположим, что ничего кроме макета не наблюдается userName
.
Мои вопросы:
Есть ли преимущество использования варианта 2 по сравнению с вариантом 1 или это не имеет значения в этом случае, так какпредставление (макет) будет просто наблюдать, пока оно не существует?
Что меня еще больше смущает, так это статья: https://android.jlelse.eu/android-architecture-components-livedata-with-data-binding-7bf85871bbd8, в которой говорится: "В предыдущем подходе (без LiveData), если мыЧтобы показать данные в пользовательском интерфейсе, мы должны предварительно проверить, существуют ли они по-прежнему. С LiveData нам не нужно беспокоиться об этом, потому что данные будут публиковаться, только если активность хотя бы запущена (то есть в запущенном или возобновленном состоянии)."
Я не понимаю эту цитируемую часть.Что подразумевается под проверкой, если пользовательский интерфейс все еще существует в случае «предыдущего подхода», который использует ObservableField
?Как бы вы применили эту проверку для моего примера в варианте 1?