RxJava onCompleted и onTerminate в главной теме

Я использую RxJava с Retrofit 2.0 на Android для сетевых запросов.

Когда я создаю наблюдаемое, я добавляю к нему следующее:

observable = observable .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) 

Тогда, если я добавлю:

 observable = observable.doOnTerminate(new Action0() { @Override public void call() { Log.d("OBS", "[" + Thread.currentThread().getName() + "] onTerminate"); } }); 

Или аналогичные для doOnError и doOnCompleted обратные вызовы выполняются в потоке ввода-вывода, а doOnNext выполняется в основном потоке.

Однако я действительно хочу, чтобы все обратные вызовы переходили в основной поток, но выполнение должно оставаться в потоке ввода-вывода.

Есть ли элегантное решение для этого без необходимости вручную обертывать мои реализации блоком, чтобы отправить что-то в основной поток?

Вы должны поместить свои обратные вызовы перед любым observeOn чтобы они оставались в своем предыдущем потоке:

 Observable.range(1, 10) .subscribeOn(Schedulers.io()) .doOnTerminate(() -> System.out.println(Thread.currentThread())) .map(v -> v + 1) .observeOn(AndroidSchedulers.mainThread()) .map(v -> Thread.currentThread() + " / " + v) .doOnNext(v -> Log.d("OBS", v)) .subscribe(); 
Intereting Posts
Как хранить длинный текст в Android? Включите аппаратное ускорение в Android-приложении, ориентируясь на сотовые и предыдущие версии В каком файле настроек используется PreferenceFragment для чтения / записи? Невозможно развернуть уведомления Firebase Как подключить Android к серверу базы данных Как установить NDK_MODULE_PATH в Android Studio и / или градуировать? Как настроить расположение таблиц в Android. Добавление столбцов в xml Каков наилучший способ отправки изображения с устройства Android на сервер для обработки и отправки результатов? Как нарисовать на холсте вида без масштабирования артефактов, когда родительский взгляд имеет масштабный коэффициент? CountDown Timer – Как показывать год, месяцы, недели Я хочу прогресс, но получаю spinner progressdialog Как фильтровать определенные приложения для намерения ACTION_SEND (и устанавливать другой текст для каждого приложения) Наблюдаемый / Наблюдатель не работает? Когда и почему следует использовать getResources ()? Как реализовать приложения Android-приложения с подстановочными доменами?