После долгого изучения проблемы я обнаружил, почему этот вызов занимал больше времени, чем блокирующий вызов.
При вызове getSchedule()
блок подписки не выполняется правильно после завершения запроса.,Он должен ждать потока пользовательского интерфейса, поэтому, если он заблокирован в другом аспекте, он должен будет ждать.
// start query
database.getSchedule()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
// once ui thread is available, display content
}, {
// ...
})
Причина, по которой мой поток пользовательского интерфейса был заблокирован, заключается в том, что я тестирую при холодном запуске, поэтомумой фрагмент был бы создан, мой запрос был бы выполнен, но тогда ему пришлось бы ждать, пока первый кадр остальной части интерфейса отобразится, прежде чем я смог обработать результат getSchedule()
.
с блокировкойвызов, у него уже был поток пользовательского интерфейса, поэтому ждать не пришлось.