改造/ RxJava Scheduler

时间:2019-04-10 15:07:37

标签: multithreading retrofit2 rx-java2 scheduler

我有下面的代码行,该行运行网络调用以检索令牌:

  

service.token(initAuth()).blockingGet()

while标记函数具有以下定义:func token : Single<Token>

从理论上讲,该调用需要在主线程中完成,因为使用RxJava2CallAdapterFactory.create()创建的 retofit 可以运行 mainThread 中的所有请求,因此我刷新/获取令牌的调用不需要触发NetworkOnMainThreadException,情况并非如此。看来,这些行为是由于对blockingGet的调用造成的,但是文档没有说明使用了特定线程。

  默认情况下,

blockingGet 在特定的 Scheduler

上不运行

哪个促使我问在mainThread

之后的另一个线程中如何进行调用

1 个答案:

答案 0 :(得分:0)

因为在我的示例应用程序中,我有2个网络调用一个来检索汽车,另一个网络用于检索代币。 Retrofit以某种方式存储了用于汽车呼叫的调度程序,并将其用于令牌呼叫。

汽车呼叫的定义:

.cars()
.subscribeOn(schedulerProvider.io())