在 RxJava 中,RxJavaPlugins.setErrorHandler 和 Subscribe onError 有什么区别?

In RxJava, what is difference between RxJavaPlugins.setErrorHandler and Subscribe onError?

RxJava中好像有两种错误:

  1. 订阅者在 onError
  2. 中捕获的错误
  3. 并且由 RxJavaPlugins.setErrorHandler
  4. 设置的处理程序全局捕获错误

我无法理解这是为什么。问题:

您可以在 Wiki pages 上找到针对 Rx2 所做更改的大部分设计决策:

One important design requirement for 2.x is that no Throwable errors should be swallowed. This means errors that can't be emitted because the downstream's lifecycle already reached its terminal state or the downstream cancelled a sequence which was about to emit an error.

为了确保错误仅由观察者的 onError() 消费者处理,您必须将全局处理程序设置为空消费者:

RxJavaPlugins.setErrorHandler(emptyConsumer());

订阅 onError() 处理流到达其终止状态之前发出的错误。对于流终止后或被取消后发出的错误,rxjava 默认将堆栈跟踪打印到控制台并调用未捕获的异常处理程序,即崩溃。 RxJavaPlugins.setErrorHandler(...) 因此有必要在全局范围内处理这些无法交付的异常。

参考: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling

https://github.com/ReactiveX/RxJava/issues/5425