RxJavaErrorHandler 能否防止错误导致 Android 应用程序崩溃?
Can RxJavaErrorHandler prevent an error from crashing the Android app?
我正在尝试抑制 RX 插件的错误,但应用程序仍然崩溃。我是不是做错了什么,或者插件错误处理程序只是为了报告而不能防止崩溃?
public void testClick(View view) {
RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() {
@Override
public void handleError(Throwable e) {
e.printStackTrace();
}
});
final PublishSubject<Integer> hot = PublishSubject.create();
hot
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer value) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info("Result");
}
});
Observable.range(0, 100).subscribe(hot);
}
如果您查看 SafeSubscriber class 中的 _onError 方法,您会发现:
try {
RxJavaPlugins.getInstance().getErrorHandler().handleError(e);
} catch (Throwable pluginException) {
handlePluginException(pluginException);
}
try {
actual.onError(e);
} catch {
...
}
可以看到RxJavaPlugins ErrorHandler不影响进一步的错误处理,应该用于log/report错误
我正在尝试抑制 RX 插件的错误,但应用程序仍然崩溃。我是不是做错了什么,或者插件错误处理程序只是为了报告而不能防止崩溃?
public void testClick(View view) {
RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() {
@Override
public void handleError(Throwable e) {
e.printStackTrace();
}
});
final PublishSubject<Integer> hot = PublishSubject.create();
hot
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer value) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info("Result");
}
});
Observable.range(0, 100).subscribe(hot);
}
如果您查看 SafeSubscriber class 中的 _onError 方法,您会发现:
try {
RxJavaPlugins.getInstance().getErrorHandler().handleError(e);
} catch (Throwable pluginException) {
handlePluginException(pluginException);
}
try {
actual.onError(e);
} catch {
...
}
可以看到RxJavaPlugins ErrorHandler不影响进一步的错误处理,应该用于log/report错误