用未收到的消息debuggingRxJava问题的最佳方法是什么?

我有一个Android应用程序与多个观察员的typesA订阅与几个types的观测types 。 订阅在IO Scheduler中完成,并在Android主线程上观察。

我所遇到的问题是,在某些工作之后随意地发出一个由B发出的消息,在A中从来没有收到,经过几个小时的讨论,我找不到原因。

问题发生时的相关代码:

打印“NEXT1”和“NEXT2”,但是“已接收”,“错误”,已完成。

//The subscription B.getMessate() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(A); //B Observable<msg> getMessage() { return Observable.create(new Observable.OnSubscribe<msg>() { public void call(Subscriber<? super msg> subscriber) { ... subscriber.onNext(msg) println("NEXT1") } }).doOnNext({ (o) -> println("NEXT2")}); } //A onNext(msg) { //Never called when problem happens println("RECEIVED") } onError(msg) { //Never called when problem happens println("ERROR") } onError(msg) { //Never called when problem happens println("COMPLETED") } 

任何人都有一些线索? 或任何build议debugging?

我所查的:

  • 我暂停了应用程序,并检查所有线程,看看是否被locking。 而且全部工作线程都停放,主线程正在等待android消息队列中的消息。
  • 观察者从来不会调用退订()

Solutions Collecting From Web of "用未收到的消息debuggingRxJava问题的最佳方法是什么?"

现在我不能重现这个问题,但是我发现RxJavaDebug是一个很好的debugging工具。

它的使用很简单:将库添加为依赖项,并在应用程序启动时注册一个侦听器:

  RxJavaPlugins.getInstance().registerObservableExecutionHook(new DebugHook(new DebugNotificationListener() { public Object onNext(DebugNotification n) { Log.v(TAG, "onNext on " + n); return super.onNext(n); } public Object start(DebugNotification n) { Log.v(TAG, "start on " + n); return super.start(n); } public void complete(Object context) { Log.v(TAG, "complete on " + context); } public void error(Object context, Throwable e) { Log.e(TAG, "error on " + context); } })); 

这将logging消息,当他们之间的observables和运营商。