Допустим, у вас есть приложение MVVM со слоем пользовательского интерфейса, ViewModel и репозиторием.Предположим, что в вашем репозитории вы получаете некоторые данные из API с помощью Single
вызовов дооснащения и преобразуете их в объект viewstate, готовый для пользовательского интерфейса.
На мой взгляд, у вас есть два основных варианта выбора.(при условии, что вы хотите использовать LiveData на уровне пользовательского интерфейса, я не включаю опцию наблюдения типов Rx из пользовательского интерфейса):
Предоставьте Rx Observable
из хранилища иsubscribe()
к нему во ViewModel.В onNext()
подписчика используйте setValue()
, чтобы обернуть ваш объект viewstate в MutableLiveData
и представить его как неизменяемый LiveData
для пользовательского интерфейса.Удалите подписку вручную в onCleared()
.
Выставьте свой Rx Observable
из хранилища и попросите ViewModel подписаться на него с LiveDataReactiveStreams
fromPublisher()
, в этом случаеручная утилизация не нужна, и MutableLiveData
нет вообще. Однако , LiveDataReactiveStreams
подписывается / отменяет подписку всякий раз, когда LiveData
становится активным / неактивным (он же имеет хотя бы одного наблюдателя), так что эта опция остановит всю потоковую обработку при каждом изменении конфигурации, в отличие от (1) (хотя, только если Observable
холодный).
Является ли этот анализ неверным или неполным каким-либо образом?Есть ли другие важные различия между этими двумя подходами?