RxJava:如何取消可观察对象的订阅

时间:2020-07-14 13:41:15

标签: rx-java rx-java3

使用RxJava3,给定ObservableSubject,我可以将Subject订阅到Observable:

observable.subscribe(subject); // returns void, not a subscription

后来,我的主题对Observable不再感兴趣,如何从Observable退订?

1 个答案:

答案 0 :(得分:2)

我认为最简单的选择是使用返回overload of subscribeDisposable,并让每个处理程序在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 Bug Tracker的目标是RxJava2,但它似乎支持了this issue