Повторная установка 2, Rx 2 и асинхронные вызовы

Я только начинаю с Retrofit и Rx и создаю API-интерфейс улыбки с такой конфигурацией (Kodein):

bind<CallAdapter.Factory>() with singleton { RxJava2CallAdapterFactory.create() } bind<RetrofitInterface>() with singleton { val retrofit = Retrofit.Builder() .client(instance()) .baseUrl(instance<String>("apiRoot")) .addCallAdapterFactory(instance()) .addConverterFactory(instance()) .build() retrofit.create(RetrofitInterface::class.java) } 

Теперь кажется, что когда я вызываю методы API, созданные Retrofit, они подписываются на текущий поток, а не на поток, установленный в .subscribeOn(someThread) , например, когда я звоню:

  registrationSession(mUserName, PublicKeyType.XXXX, TargetType.YYYY) .subscribeOn(io.reactivex.schedulers.Schedulers.newThread()) ... .subscribe( { }, { error -> Log.e("Error", error.message) } ) 

обновленная версия registrationSession вызовет запрос НЕПРАВИЛЬНО, в основном потоке, НЕ когда я подписываюсь, чего я не ожидал бы (но опять же – я только начинаю с Rx, я могу ошибаться)

На всякий случай, когда вам интересно, как отстраняется регистрация, это простая оболочка функции:

 @POST("registration/session") fun registrationSession( @Header(Constants.LB_DEVICEID_HEADER) deviceUuid: String, @Body registrationSessionPost: RegistrationSessionPost ): Observable<Response> 

Итак, что я могу сделать, чтобы сделать registrationSession запущенным в разных потоках? Есть ли способ?

Solutions Collecting From Web of "Повторная установка 2, Rx 2 и асинхронные вызовы"

Единственная причина, по которой это может произойти, заключается в том, что subscribeOnobserveOn от observeOn ) можно вызвать только один раз. Чтобы быть конкретным, первый вызов subscribeOn будет работать, другие вызовы (или используемые операторами в этом потоке) будут проигнорированы. Убедитесь, что subscribeOn не называется нигде в этом потоке.