Используя единичный тест, я не воспроизвожу вашу проблему. С наблюдением или без него я наблюдаю исключение UndeliverableException, которое вызывается в RxJavaPlugins и вызываемый doOnDispose.
Что ты видишь?
observeOn
У меня есть следующий пример:
private var dis: Disposable? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
val btn = findViewById<Button>(R.id.btn)
val btn2 = findViewById<Button>(R.id.btn2)
btn.setOnClickListener {
dis = Single.fromCallable {
Thread.sleep(1000)
15
}
.subscribeOn(Schedulers.io())
//.observeOn(AndroidSchedulers.mainThread())
.subscribe({ v ->
log("Success: $v")
}, { e ->
log("Error: $e")
})
}
btn2.setOnClickListener {
dis?.dispose()
}
}
fun log(msg: String) {
Log.d("TAGG", msg + " on " + Thread.currentThread().name);
}
Когда». @test общественности недействительным testObserveOnEffect () кидает Exception { Одноразовые Дис = Single . FromCallable (() -> { Thread . Сон ( 1000 ), возвращение 15 ; }) . SubscribeOn ( Планировщики . Ю ()) . ObserveOn ( AndroidSchedulers . mainThread ()) . doOnDispose (() -> logThread ( «распоряжаться» )) . подписаться ( v -> logThread ( v ), e -> logThread ( e )); Одноместный . таймер ( 50 , TimeUnit . MILLISECONDS ). подписаться ( o -> dis . dispose ()); Тема . сон ( 2000 год ); } (..) ": COMMENTED и I:
Затем будет вызван блок запроса onRrror наблюдателя.
Когда строка «.observeOn (..)» НЕОБХОДИМА, и я:
Затем блок invor's onError кода НЕ будет вызываться.
Я просто не понимаю такого поведения. В моем понимании эта строка кода не должна влиять на логику того, будет ли onError вызываться или нет.
Почему это происходит? Это документированное поведение? Пожалуйста, дайте мне некоторые объяснения или переадресации.
Спасибо!