#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. Я понял. Спасибо за ваш ответ