У меня есть следующий пример:
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);
}
Когда строка ".observeOn (..)" ЗАМЕЧАНА, а я:
- пресс батн
- нажмите btn2 сразу после нажатия btn
Тогда будет вызван блок кода наблюдателя onError.
Когда строка ".observeOn (..)" ОБНОВЛЕНА, а я:
- пресс btn
- нажмите btn2 сразу после нажатия btn
Тогда блок кода наблюдателя onError НЕ будет вызван.
Я просто не могу понять такое поведение. В моем понимании эта строка кода не должна влиять на логику вызова onError или нет.
Почему это происходит? Это документированное поведение? Пожалуйста, дайте мне какое-нибудь объяснение или переадресацию.
Спасибо!