Определение потока выполнения subscribeOn в RxJava

Блок create выполнится на scheduler Schedulers.io(), а не на UI-потоке. Обработчик subscribe в этом примере не вызовется: источник не отправляет элементы.

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

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

Блок create выполнится на scheduler Schedulers.io(), а не на UI-потоке. Обработчик subscribe в этом примере не вызовется: источник не отправляет элементы.

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

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

Условие

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

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

Ответ

Блок create выполнится на scheduler Schedulers.io(), а не на UI-потоке. Обработчик subscribe в этом примере не вызовется: источник не отправляет элементы.

subscribeOn переносит подписку на источник, включая выполнение переданной в create функции. Однако пустой блок не вызывает ни onNext, ни onComplete, поэтому подписка остаётся незавершённой без значений.

Если добавить синхронный emitter.onNext(1), обработчик подписчика без observeOn также выполнится в потоке источника. Для обновления Android UI ниже по цепочке нужен observeOn(AndroidSchedulers.mainThread()). Подписку следует освобождать через Disposable согласно жизненному циклу экрана.

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

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

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

Подробнее