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()) 
});

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...