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

Обработчик onSuccess будет вызван на Schedulers.computation(), поскольку перед subscribe стоит observeOn(computation). subscribeOn(io) задаёт подписку на источник, а не конечный UI-поток.

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

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

Обработчик onSuccess будет вызван на Schedulers.computation(), поскольку перед subscribe стоит observeOn(computation). subscribeOn(io) задаёт подписку на источник, а не конечный UI-поток.

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

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

Условие

Метод fetchRegions возвращает Single с набором данных, при этом внутри потока не происходит переключения. Укажите, на каком Scheduler будет выполнен код внутри обработчика onSuccess.

fun updateRegions() {
    fetchRegions()
        .subscribeOn(Schedulers.io())
        .observeOn(Schedulers.computation())
        .subscribe(
            { regionList ->
                renderRegions(regionList)
            }
        )
}

Ответ

Обработчик onSuccess будет вызван на Schedulers.computation(), поскольку перед subscribe стоит observeOn(computation). subscribeOn(io) задаёт подписку на источник, а не конечный UI-поток.

При отсутствии внутренних переключений fetchRegions начинает работу на io, затем observeOn переводит доставку результата на computation. Если renderRegions меняет Android View, перед подпиской нужен AndroidSchedulers.mainThread(). Само название render не вызывает автоматического переключения на Main.

Источник: reactivex.io.

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

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

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

Подробнее