在会议室中使用哪一个:LiveData或RxJava?

时间:2018-11-12 02:49:28

标签: rx-java rx-java2 android-room observer-pattern android-livedata

我正在使用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不太熟悉,但是就我的研究而言,它是一个观察者模式,它也知道生命周期,这意味着我将停止通知UI是否未处于活动状态。就是说,正如您在我的Flowable代码中所看到的那样,我将其添加到CompositeDisposable中,然后将其放置在onDestroy()方法中。 因此,当我可以使用LiveData来管理所有内容时,我不知道为什么要使用RxJava,这有很多方便的运算符。

因此,在使用Room时,我应该何时使用LiveData,何时使用RxJava。反映给定方案的答案非常受赞赏,但也欢迎其他用例。

我关注了When to use RxJava in Android and when to use LiveData from Android Architectural Components?,但范围太广了,我无法具体回答我的情况

2 个答案:

答案 0 :(得分:2)

通常在使用视图时,最好使用LiveData。它可以自动管理订阅,与DataBinding library一起使用时效果很好。有点像生命周期感知的数据持有者,反对数据流(Rx Concept)。

在其他情况下,我建议使用RxJava,它具有用于转换和并发的强大运算符链。希望它对您的理解有所帮助。

答案 1 :(得分:0)

此线程可能已关闭,但我对使用问题有很好的解决方案 Rxjava和Room一起进行所需的任何转换,然后转换为livedata 观察您的意见。

在这里检查我的解决方案: solution