Как RXJava Scheduler / Threading работает для разных операторов? - PullRequest
0 голосов
/ 31 декабря 2018

Может ли кто-нибудь помочь мне объяснить, какой планировщик работает под кодом ниже?

Completable.complete()                 
.subscribeOn(http://Schedulers.io  ())                 
.observeOn(AndroidSchedulers.mainThread())                 
.delay(5000, TimeUnit.MILLISECONDS)                 
.doOnComplete(() -> liveDataState.postValue(""))                 
.subscribe()

Мой вопрос в том, какие планировщики delay (), doOnComplete () и subscribe () являютсяиспользуя io или mainThread?

1 Ответ

0 голосов
/ 01 января 2019

После копания в потоках RxJava за последние два дня было найдено правило для обработки потоков RxJava:

  • observeOn работает только для нижестоящего оператора
  • subscribeOn работает дляоператоры как нисходящего, так и обратного потоков
  • Последовательный / Множественный 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

Кроме того, вы можете посмотреть на мраморную диаграмму для большего понимания:

enter image description here

...