RxDogTag 使用教程
项目介绍
RxDogTag 是一个用于在 RxJava 2+ 观察者中标记原始订阅点的实用程序。其主要目标是,在发生未处理的错误时,显示这些错误的订阅位置,以便于后续的错误报告和调查。RxDogTag 特别适用于那些没有实现 onError()
方法的 RxJava 观察者。
项目快速启动
添加依赖
首先,你需要根据使用的 RxJava 版本添加相应的依赖:
-
对于 RxJava 2:
implementation("com.uber.rxdogtag:rxdogtag:x.y.z")
-
对于 RxJava 3:
implementation("com.uber.rxdogtag2:rxdogtag:x.y.z")
安装 RxDogTag
在你的应用程序生命周期的早期,通过以下代码安装 RxDogTag:
RxDogTag.install();
这将安装必要的钩子到 RxJavaPlugins
中。
应用案例和最佳实践
基本使用案例
考虑以下典型的 RxJava 错误:
Observable.just("Hello")
.map(s -> null) // 这里会抛出 NullPointerException
.subscribe(System.out::println);
启用 RxDogTag 后,错误信息将明显改变,包含推断的订阅点:
io.reactivex.exceptions.OnErrorNotImplementedException: The mapper function returned a null value
Caused by: java.lang.NullPointerException: The mapper function returned a null value
at anotherpackage.ReadMeExample.complex(ReadMeExample.java:55)
at [[ ↑↑ Inferred subscribe point ↑↑ ]] (:0)
at [[ ↓↓ Original trace ↓↓ ]] (:0)
at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:57)
最佳实践
- 忽略特定包:RxDogTag 在检查堆栈时需要忽略某些包(如 RxDogTag 自己的或者 RxJava 的)以提升效率。可以通过
RxDogTag.Builder#addIgnoredPackages()
添加这些包。 - 与 AutoDispose 集成:AutoDispose 是一个自动处理流的库。可以通过单独的
rxdogtag-autodispose
依赖及其AutoDisposeObserverHandler
单例来获得对此的支持。
典型生态项目
AutoDispose
AutoDispose 是一个用于自动处理 RxJava 流的库。它通过自己的装饰器观察者实现,可以与 RxDogTag 一起工作,通过其 delegateObserver()
API 在 AutoDisposingObserver
接口上。
添加 AutoDispose 支持
-
对于 RxJava 2:
implementation("com.uber.rxdogtag:rxdogtag-autodispose:x.y.z")
-
对于 RxJava 3:
implementation("com.uber.rxdogtag2:rxdogtag-autodispose:x.y.z")
通过 RxDogTag.builder().configureWith(AutoDisposeConfigurer::configure).install()
启用 AutoDispose 支持。
以上是 RxDogTag 的基本使用教程,涵盖了项目介绍、快速启动、应用案例和最佳实践以及典型生态项目。希望这些信息能帮助你更好地理解和使用 RxDogTag。