Как 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

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

Другие вопросы по тегам