Какой из них использовать в Room: LiveData или RxJava?
Я использую Room для управления базой данных, и я не знал, что использовать при работе с данными в реальном времени. На данный момент, чтобы управлять данными в реальном времени, которые я использую Flowable
и я очень доволен этим. То, что я был смущен, я могу использовать LiveData
а также сделать ту же операцию.
Чтобы дать некоторый контекст, вот как я запрашиваю данные и обновляю свое представление.
Текучий
addDisposable(userDao().getUsersFlowable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(users -> userAdapter.setUsers(users)));
LiveData
userDao().getUsersLiveData()
.observe(this, users -> {
userAdapter.setUsers(users)
})
Я не очень знаком с LiveData
, но, насколько мне известно, это паттерн наблюдателя, который также учитывает жизненный цикл, что означает, что я перестану уведомлять, если пользовательский интерфейс не находится в активном состоянии. Тем не менее, как вы можете видеть в моем Flowable
код, я добавляю его CompositeDisposable
и я буду распоряжаться в моем onDestroy()
метод. Так что я не вижу смысла, почему я должен использовать LiveData
когда я могу все с RxJava
, который имеет много операторов для удобства.
Так, когда я должен использовать LiveData
и когда RxJava
во время работы с комнатой. Ответы, отражающие данный сценарий, высоко ценятся, но приветствуются и другие варианты использования.
Я следовал, Когда использовать RxJava в Android и когда использовать LiveData от Android Architectural Components?, но это слишком широко, и я не мог получить ответ конкретно в моем случае
1 ответ
Обычно при работе с представлениями часто полезно использовать LiveData. Он автоматически управляет подпиской, очень хорошо работает с библиотекой DataBinding. это своего рода держатель данных, поддерживающий жизненный цикл, а не поток данных (Rx Concept).
В других случаях я бы предложил использовать RxJava, который имеет мощные цепочки операторов для преобразования и параллелизма. Надеюсь, это проливает свет на ваше понимание.
Этот поток может быть закрыт, но у меня есть хорошее решение проблемы использования Rxjava с Room для любого преобразования, которое вы хотите, а затем преобразования в liveata, чтобы наблюдать в ваших представлениях.
Проверьте мое решение здесь: решение