RxJava с MVVM: MutableLiveData с setValue () против LiveDataReactiveStreams - PullRequest
0 голосов
/ 14 декабря 2018

Допустим, у вас есть приложение MVVM со слоем пользовательского интерфейса, ViewModel и репозиторием.Предположим, что в вашем репозитории вы получаете некоторые данные из API с помощью Single вызовов дооснащения и преобразуете их в объект viewstate, готовый для пользовательского интерфейса.

На мой взгляд, у вас есть два основных варианта выбора.(при условии, что вы хотите использовать LiveData на уровне пользовательского интерфейса, я не включаю опцию наблюдения типов Rx из пользовательского интерфейса):

  1. Предоставьте Rx Observable из хранилища иsubscribe() к нему во ViewModel.В onNext() подписчика используйте setValue(), чтобы обернуть ваш объект viewstate в MutableLiveData и представить его как неизменяемый LiveData для пользовательского интерфейса.Удалите подписку вручную в onCleared().

  2. Выставьте свой Rx Observable из хранилища и попросите ViewModel подписаться на него с LiveDataReactiveStreams fromPublisher(), в этом случаеручная утилизация не нужна, и MutableLiveData нет вообще. Однако , LiveDataReactiveStreams подписывается / отменяет подписку всякий раз, когда LiveData становится активным / неактивным (он же имеет хотя бы одного наблюдателя), так что эта опция остановит всю потоковую обработку при каждом изменении конфигурации, в отличие от (1) (хотя, только если Observable холодный).

Является ли этот анализ неверным или неполным каким-либо образом?Есть ли другие важные различия между этими двумя подходами?

...