我正在试图了解rxJava
,并且正在寻找专家或有经验的人来尝试解决我的问题,但事实是我已经使用RxJava一年了,但仅适用于{ {1}}个电话,我一直在使用Retrofit
并做类似的事情:
Disposable
好的,但是当我在Google上搜索时,我看到人们使用disposable = myService.myInterface.getData()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(this::handleResponse, this::handleError))
,而他们却没有CompositeDisposable
,而是disposable = ...
,我想知道何时使用每种一个,我也说compositeDisposable.add(....)
是用于返回值或错误,但是Single
和有什么区别呢?如果Observable
也可以返回Single
。
在另一个示例中,我使用的是这个
:List<Object>
我注意到,如果我在private var subscription: Disposable? = null
subscription = model.result()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableObserver<ListViewModel>() {
override fun onNext(viewModel: ListViewModel) {
if (mView != null) {
mView!!.updateData(viewModel)
}
}
override fun onError(e: Throwable) {
e.printStackTrace()
if (mView != null) {
mView!!.showError()
}
}
override fun onComplete() {
if (mView != null) {
mView!!.hideProgressBar()
}
}
})
中使用add.(..)
,则必须清除onStop()
我也一直在使用compositeDisposable
,没有disposable
,onNext
和onError
的人,你们可以在使用所有这些时让我知道吗?
答案 0 :(得分:0)
Observable
和Single
之间的核心区别相对容易解释:
Observable
可以发出0到无限值Single
仅发射1次 CompositeDisposable
而非“常规” Disposable
,因为您可以使用它撰写 Disposables
。为什么这有用?假设您同时调用3个不同的网络请求,然后可以将所有这些Disposables
添加到CompositeDisposable
中。现在,例如,如果您切换“活动”,则您不想继续执行这3个请求。因此,将调用dispose()
的{{1}}函数。它将删除所有CompositeDisposable
,并且不允许添加新的Disposables
。相反,还有一个名为clear()
的函数也可以删除所有一次性物品,但允许添加新的物品。
因此,基本上可以用一个方法调用来处理所有的Disposables
而不是一个一个地手动删除。因此,可以将CompositeDisposable
想象成Disposables
的“经理”。
即使使用常规的Disposable
,也应该调用dispose()
函数。否则,尽管您位于应用程序的完全不同的部分,您仍可以继续运行Observables
。
答案 1 :(得分:0)
似乎您对RxJava感到困惑。 First首先熟悉RxJava概念,特别是Observable,Single,Completeable等。哪个服务于什么目的?使用正确的调度程序。这样,一切对您来说都会很清楚。
如果您的班级中只有一个订阅或者您想独立处理所有订阅,则使用Disposable
。
在将所有订阅放到一个一次性物品中时,请使用CompositeDisposable
,以便您可以根据生命周期以简单的方式进行清除。