Какой из них использовать в 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, чтобы наблюдать в ваших представлениях.

Проверьте мое решение здесь: решение

Другие вопросы по тегам