У меня есть следующая строка кода, которая запускает сетевой вызов для получения токена:
service.token(initAuth()).blockingGet()
в то время как функция токена имеет следующее определение: func token : Single<Token>
Теоретически вызов должен быть выполнен в основном потоке, потому что созданный переоборудовать с RxJava2CallAdapterFactory.create()
, который по определению запускает весь запрос в mainThread, поэтому мой вызов для обновления/получения токена должен вызвать NetworkOnMainThreadException
желание, это не так. Похоже, такое поведение связано с вызовом blockingGet
, но в документации не указано, что используется конкретный поток.
blockingGet does not operate by default on a particular Scheduler
Что подтолкнуло меня спросить, как выполняется вызов в другом потоке, а не в mainThread
Потому что в моем примере приложения две сети вызывают один для получения легковые автомобили, а другая — для получения жетон. Каким-то образом Retrofit сохраняет планировщик, используемый для вызова легковые автомобили, и использует его для вызова жетон.
Определение вызова легковые автомобили:
.cars() .subscribeOn(schedulerProvider.io())