我试图理解rxJava
我正在寻找专家或有经验的人来尝试解决我的问题,问题是我已经使用 RxJava 一年了,但仅限 Retrofit
打电话,我一直用Disposable
并做类似的事情:
disposable = myService.myInterface.getData()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(this::handleResponse, this::handleError))
好的,但是当我在 Google 上搜索时,我看到人们使用 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
和onComplete
你们能告诉我什么时候使用所有这些吗?
最佳答案
Observable
和 Single
之间的核心区别相对容易解释:
Observable
可以发出 0 到无穷大的值- 另一方面,
Single
仅发射 1 次
CompositeDisposable
而不是“常规”Disposable
,因为您可以用它来组合 Disposables
。为什么这有用?假设您同时调用 3 个不同的网络请求,那么您可以将所有这些 Disposables
添加到 CompositeDisposable
中。例如,现在如果您切换 Activity,则您不想继续这 3 个请求。因此,CompositeDisposable
的 dispose()
函数被调用。它将删除所有Disposables
并且不允许添加新的。相反,还有一个名为 clear()
的函数,它也会删除所有 Disposables,但允许添加新的 Disposables。
所以基本上,您可以通过单个方法调用来处理此问题,而不是一一手动删除所有Disposables
。因此,CompositeDisposable
可以被想象成 Disposables
的“管理器”。
即使使用常规的 Disposable
,您也应该调用 dispose()
函数。否则,尽管位于应用程序的完全不同的部分,您仍可以继续运行 Observables
。
关于java - 如何使用rxJava正确调用retrofit服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001199/