私はそれがまだThread.sleep(2000)
ですが致命的な例外:RxCachedThreadScheduler-1トリガーを破棄します。どうして?
disposable = Observable.create<String>({
subscriber ->
try {
Thread.sleep(2000)
subscriber.onNext("Test")
subscriber.onComplete()
} catch (exception: Exception) {
subscriber.onError(exception)
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result -> Log.d("Test", "Completed $result") },
{ error -> Log.e("Test", "Completed ${error.message}") })
が、私はdisposable?.dispose()
コールを実行することを観察可能があり、次のRxJava 2のコードを(Kotlinで)、持っている、それは
FATAL EXCEPTION: RxCachedThreadScheduler-1
Process: com.elyeproj.rxstate, PID: 10202
java.lang.InterruptedException
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Thread.java:371)
at java.lang.Thread.sleep(Thread.java:313)
at presenter.MainPresenter$loadData$1.subscribe(MainPresenter.kt:41)
at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
私は期待してエラーになりますdispose
は、操作をサイレントモードでキャンセルするのに役立ちます。または、ほとんどの場合、サブスクライブのLog.e
でエラーがキャッチされます。ただし、上記のエラーメッセージに従ってクラッシュするだけです。
なぜ例外がエスケープされたのですか? dispose
は、クラッシュせずにすべての操作をサイレントモードでキャンセルするとは思いませんか?
おかげ@Kiskae。それは助ける! – Elye