【发布时间】:2020-07-14 13:41:15
【问题描述】:
使用 RxJava3,给定 Observable 和 Subject,我可以将 Subject 订阅到 Observable:
observable.subscribe(subject); // returns void, not a subscription
后来我的 Subject 对 Observable 不感兴趣了,如何退订 Observable 呢?
【问题讨论】:
使用 RxJava3,给定 Observable 和 Subject,我可以将 Subject 订阅到 Observable:
observable.subscribe(subject); // returns void, not a subscription
后来我的 Subject 对 Observable 不感兴趣了,如何退订 Observable 呢?
【问题讨论】:
我认为最简单的选择是使用返回Disposable 的overload of subscribe,并让每个处理程序在您的Subject 上调用适当的方法,如下所示:
Disposable d = observable
.subscribe(subject::onNext, subject::onError, subject::onComplete);
// Later
d.dispose();
您还可以创建一个DisposableObserver 将所有消息转发到Subject,并使用subscribeWith 而不是subscribe,虽然它更冗长:
Disposable d = observable
.subscribeWith(new DisposableObserver<Integer>() {
@Override public void onStart() {
}
@Override public void onNext(Integer t) {
subject.onNext(t);
}
@Override public void onError(Throwable t) {
subject.onError(t);
}
@Override public void onComplete() {
subject.onComplete();
}
});
我不知道有任何更简洁的选项,来自 RxJava 错误跟踪器的 this issue 似乎支持这一点,尽管它针对的是 RxJava2。
【讨论】: