如何使用rxJava正确调用改造服务?

时间:2019-05-06 08:09:52

标签: java android kotlin rx-java

我正在试图了解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,没有disposableonNextonError的人,你们可以在使用所有这些时让我知道吗?

2 个答案:

答案 0 :(得分:0)

ObservableSingle之间的核心区别相对容易解释:

  • 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,以便您可以根据生命周期以简单的方式进行清除。