RxJava全局处理程序和Android Vitals

时间:2019-08-20 07:34:33

标签: java android kotlin rx-java2 android-vitals

我对RxJava全局处理程序和Android Vitals有疑问。 在Android Vitals中,我可以看到

  

io.reactivex.exceptions.UndeliverableException

     

产生于:java.lang.InterruptedException:at   com.google.common.util.concurrent.AbstractFuture.get   (AbstractFuture.java:527)在   com.google.common.util.concurrent.FluentFuture $ TrustedFuture.get   (FluentFuture.java:82)

但是我已经不知道问题出在哪里了,所以我考虑添加RxJava全局错误处理程序:

RxJavaPlugins.setErrorHandler(e -> {
    if (e instanceof UndeliverableException) {
        e = e.getCause();
    }
    if ((e instanceof IOException) || (e instanceof SocketException)) {
        // fine, irrelevant network problem or API that throws on cancellation
        return;
    }
    if (e instanceof InterruptedException) {
        // fine, some blocking code was interrupted by a dispose call
        return;
    }
    if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) {
        // that's likely a bug in the application
        Thread.currentThread().getUncaughtExceptionHandler()
            .handleException(Thread.currentThread(), e);
        return;
    }
    if (e instanceof IllegalStateException) {
        // that's a bug in RxJava or in a custom operator
        Thread.currentThread().getUncaughtExceptionHandler()
            .handleException(Thread.currentThread(), e);
        return;
    }
    Log.warning("Undeliverable exception received, not sure what to do", e);
});

还有我的问题。如果我要添加全局错误处理程序,我会丢失来自Android Vitals的报告吗?迷失的意思是不会有新的报告,因为我们将处理导致崩溃的错误。

是否可以添加全局错误处理程序并仍然在Android Vitals中获取报告?

1 个答案:

答案 0 :(得分:0)

您的目标应该是减少崩溃。因此,只要您能够正确处理异常,就应该这样做。

当无法将异常传递给观察者时,通常会弹出UndeliverableException。如果Subject没有观察者,可能就是这种情况。

通常,您可以轻松地轻松解决这些问题。或者,您可以忽略它,然后抛出其他任何错误。

RxJavaPlugins.setErrorHandler(e -> {
    if (e instanceof UndeliverableException) {
        return;
    }
    throw e;
});

也许还记录了该问题以了解它。