gpt4 book ai didi

android - 调试未收到消息的 RxJava 问题的最佳方法是什么

转载 作者:IT老高 更新时间:2023-10-28 23:32:34 35 4
gpt4 key购买 nike

我有一个 Android 应用,其中包含多个 A 类观察者,这些观察者订阅了多个 B 类观察者。订阅在 IO Scheduler 中完成,在 Android 主线程上进行观察。

我遇到的问题是,随机在完成一些工作后,B 发出的一条消息从未在 A 中收到,并且经过几个小时的调试后,我找不到原因。

相关代码问题发生时:

"NEXT1"和 "NEXT2"被打印,但 "RECEIVED","ERROR", COMPLETED 不是。

            //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")
}

有人知道吗?或者有什么调试建议?

我检查过的内容:

  • 我已暂停应用并检查所有线程是否已锁定。而且显然所有工作线程都已停放,主线程正在等待 android 消息队列中的消息。
  • 观察者从不调用 unsubscribe()

最佳答案

现在我无法重现该问题,但我找到了 RxJavaDebug一个很好的调试工具。

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

  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);
}
}));

这将在消息在可观察对象和操作符之间传输时记录消息。

关于android - 调试未收到消息的 RxJava 问题的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25332617/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com