Обработчик onSuccess будет вызван на Schedulers.computation(), поскольку перед subscribe стоит observeOn(computation). subscribeOn(io) задаёт подписку на источник, а не конечный UI-поток.
Определение потока выполнения onSuccess при подписке в RxJava
Обработчик 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.