Как определить потоки выполнения операторов RxJava в цепочке

create запускается на io, но оба map и обработчик subscribe в данном коде не выполняются: источник пустой и ничего не эмитит. Потоки этих обработчиков имеют смысл только после onNext.

Короткий ответ

Что ответить на собеседовании

create запускается на io, но оба map и обработчик subscribe в данном коде не выполняются: источник пустой и ничего не эмитит. Потоки этих обработчиков имеют смысл только после onNext.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо понять, в каких потоках будет работать create, map и subscribe, если запускать приведённый фрагмент кода из главного (UI) потока.

Observable.create<Int> { }
    .map { }
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.computation())
    .map { }
    .subscribe { }

Ответ

create запускается на io, но оба map и обработчик subscribe в данном коде не выполняются: источник пустой и ничего не эмитит. Потоки этих обработчиков имеют смысл только после onNext.

Если create отправит значение, первый map обработает его на io, второй map и конечный подписчик — на computation после observeOn. Построение цепочки происходит на UI, а subscribeOn переносит подписку. Не путайте пустое тело create с Observable.empty: первое не сообщает даже о завершении.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее