Exp*_* be 6 android retrofit2 rx-java2
watchOn:此方法只是简单地将所有运算符的线程更改为更下游(https://medium.com/upday-devs/rxjava-subscribeon-vs-observeon-9af518ded53a)
调用API时,我想在IO线程上运行与服务器的通信,并想在mainThread上处理结果。
我在许多教程中都看到了下面的代码,毫无疑问,它是正确的。但是我的理解是相反的,所以我想知道我的误解。
requestInterface.callApi()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe())
Run Code Online (Sandbox Code Playgroud)
watchOn(AndroidSchedulers.mainThread())
:observeOn将所有运算符的线程进一步向下游移动,但是在示例中,实际的调用API函数是否高于observeOn?
.subscribeOn(Schedulers.io())
:奇怪的部分,它需要在主线程上订阅,但是在IO线程上订阅?
请告诉我我误会什么?
基本,我们将有
Observable.subscribe(Observer);// => Observer observe Observable and Observable subscribe Observer
Run Code Online (Sandbox Code Playgroud)
例
requestInterface.callApi().subscribe(new Observer...); // requestInterface.callApi() <=> Observable
Run Code Online (Sandbox Code Playgroud)
从http://reactivex.io/documentation/operators/subscribeon.html
SubscribeOn
- SubscribeOn运算符指定Observable将在哪个线程上开始操作,无论该运算符在运算符链中的哪个点被调用
ObserveOn(影响2件事)
它指示可观察对象将通知发送到指定调度程序上的观察者。
ObserveOn影响Observable将在该运算符出现的位置使用的线程
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())
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |