微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – Rxjava observeOn和subscribeOn在Retrofit中

observeOn:
方法只是更改下游所有操作符的线程
(https://medium.com/upday-devs/rxjava-subscribeon-vs-observeon-9af518ded53a)

调用API时,我想在IO线程上运行与服务器的通信,并希望在mainThread上处理结果.

我在许多教程中看到了下面的代码,毫无疑问它是正确的.
但我的理解是相反的,所以我想知道我误解了什么.

requestInterface.callApi()
    .observeOn(AndroidSchedulers.mainThread())
    .subscribeOn(Schedulers.io())
    .subscribe())

observeOn(AndroidSchedulers.mainThread())

:observeOn更改下游所有操作符的线程,但在本例中,实际调用API函数是否高于observeOn?

.subscribeOn(Schedulers.io())

:奇怪的是,它需要在主线程上订阅,但在IO线程上订阅

请告诉我我的误解是什么?

解决方法:

基本,我们会有

Observable.subscribe(Observer);// => Observer observe Observable and Observable subscribe Observer

requestInterface.callApi().subscribe(new Observer...); // requestInterface.callApi() <=> Observable

http://reactivex.io/documentation/operators/subscribeon.html

SubscribeOn

  • SubscribeOn operator designates which thread the Observable will begin operating on, no matter at what point in the chain of operators that operator is called

ObserveOn(影响2件事)

  • It instructs the Observable to send notifications to Observers on a specified Scheduler.

  • ObserveOn affects the thread that the Observable will use below where that operator appears

registerUserReturnedobserverble()  // run on worker thread because subscribeOn(Schedulers.io()) (line 5)
.andThen(loginReturnObserverble()) // run on worker thread because subscribeOn(Schedulers.io()) (line 5)
.observeOn(AndroidSchedulers.mainThread())
.andThen(getUserDataReturnObserverble()) // run on main thread because .observeOn(AndroidSchedulers.mainThread()) is above this operator (line 3)
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Void>{
    // run on main thread because observeOn(AndroidSchedulers.mainThread()) 
});

原文地址:https://www.jb51.cc/android/1075129.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐