Как RXJava Scheduler/Threading работает для разных операторов?
Может кто-нибудь, пожалуйста, помогите мне объяснить, какой планировщик работает ниже кода?
Completable.complete()
.subscribeOn(http://Schedulers.io ())
.observeOn(AndroidSchedulers.mainThread())
.delay(5000, TimeUnit.MILLISECONDS)
.doOnComplete(() -> liveDataState.postValue(""))
.subscribe()
Мой вопрос в том, какие планировщики используют delay(), doOnComplete() и subscribe() io
или же mainThread
?
1 ответ
После изучения потоков в RxJava за последние два дня было найдено правило для обработки потоков / планирования RxJava:
observeOn
работает только нижестоящий операторsubscribeOn
работает как для нижестоящих, так и для последующих операторов- Последовательный /Multiple
subscribeOn
не меняйте тему - следствие
observeOn
смените резьбу для нижнего вентилятора - В отличие от
subscribeOn()
, мы можем использоватьobserveOn()
несколько раз для бесшовного переключения потоков - Оператор как
delay()
,interval()
имеет планировщик по умолчанию и может также изменить планировщик
Итак, для моего случая:
Completable.complete() // IO scheduler based on subscribeOn scheduler
.subscribeOn(http://Schedulers.io ())
.observeOn(AndroidSchedulers.mainThread())
.delay(5000, TimeUnit.MILLISECONDS) // Default Computation scheduler
.doOnComplete(() -> liveDataState.postValue("")) // Computation scheduler by delay scheduler
.subscribe() // Computation scheduler by delay as well
Кроме того, вы можете посмотреть на мраморную диаграмму для большего понимания: