我正在使用Room进行数据库管理,并且在处理实时数据时使用什么感到困惑。目前,我正在使用Flowable
来管理实时数据,对此我感到非常满意。我感到困惑的是我也可以使用LiveData
来执行相同的操作。
为了提供一些背景信息,这是我查询数据和更新视图的方式。
addDisposable(userDao().getUsersFlowable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(users -> userAdapter.setUsers(users)));
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?,但范围太广了,我无法具体回答我的情况
答案 0 :(得分:2)
通常在使用视图时,最好使用LiveData。它可以自动管理订阅,与DataBinding library一起使用时效果很好。有点像生命周期感知的数据持有者,反对数据流(Rx Concept)。
在其他情况下,我建议使用RxJava,它具有用于转换和并发的强大运算符链。希望它对您的理解有所帮助。
答案 1 :(得分:0)
此线程可能已关闭,但我对使用问题有很好的解决方案 Rxjava和Room一起进行所需的任何转换,然后转换为livedata 观察您的意见。
在这里检查我的解决方案: solution