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())
请告诉我我的误解是什么?
解决方法:
基本,我们会有
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 举报,一经查实,本站将立刻删除。