RxJava:抛出异常时应用程序死亡

时间:2018-02-19 22:44:58

标签: android rx-java reactive-programming rx-java2

我试图在Schedulers IO线程中执行一些IO操作,如果抛出异常,我想向用户显示一些Toast(当然是在mainThread中)。

为此,我使用以下代码:

 try {
        Observable.interval(0, 15, TimeUnit.SECONDS)
            .observeOn(Schedulers.io())
            .doOnNext(event -> failingNetworkOperation();)
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(throwable -> 
                    Toast.makeText(MainActivity.this, "Error message", LENGTH_SHORT).show())
            .subscribe();

 } catch(Throwable t)  {
        //THIS CODE IS NEVER REACHED
        //BUT THE APPLICATION DIES.
        t.printStackTrace();
 }

当方法" failingInputOutputOperation"抛出异常时,Throwable IS陷入" doOnError"消费者,但应用程序死亡。

我在try / catch集团中对整个片段进行了解释,但是异常从未被捕获过。

为什么应用程序会死亡,如何使用RxJava正确管理错误? 非常感谢你!

1 个答案:

答案 0 :(得分:3)

您的应用已死,因为您在subscribe中没有错误处理程序。将doOnError的回调放在那里:

    Observable.interval(0, 15, TimeUnit.SECONDS, Schedulers.io())
        .doOnNext(event -> failingNetworkOperation())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(items -> { }, 
             throwable -> 
                Toast.makeText(MainActivity.this, "Error message", LENGTH_SHORT).show()
        );