Подраздел RxJava BehaviorSubject

#android #multithreading #rx-java

#Android #многопоточность #rx-java

Вопрос:

Приведенный ниже Код

почему onnext вызывался только один раз? Когда я удаляю subscribeOn, он вызывался для каждого номера. когда я подписываюсь на поток ввода-вывода только один раз (для 8658)

кто-нибудь может мне это объяснить?

     val subject = BehaviorSubject.create<Int>()
    subject.onNext(2121)
    subject.distinctUntilChanged().doOnNext {
        Log.d("AHMET VEFA SARUHAN", it.toString())
    }.subscribeOn(Schedulers.io()).subscribe(object : Observer<Int> {
        override fun onSubscribe(d: Disposable?) {

        }

        override fun onNext(t: Int?) {

        }

        override fun onError(e: Throwable?) {

        }

        override fun onComplete() {

        }
    })
    subject.onNext(5436)
    subject.onNext(8658)
 

Ответ №1:

При использовании subscribeOn цепочка для наблюдения BehaviorSubject устанавливается одновременно с потоком, вызывающим onNext s. Требуется время, чтобы a subscribeOn вступило в силу, поэтому основной поток просто запускается вперед и перезаписывает текущее значение объекта на последнее за это время.

Нет никакой практической причины использовать subscribeOn на a Subject в целом.

Комментарии:

1. Я понял. Спасибо за ваш ответ