15

当像这样创建 Observable 时:

public void foo() {

    Observable observable = Observable.fromCallable(() -> {
        bar();
        return "";
      })
      .doOnSubscribe(disposable -> System.out.println("onSubscribe"))
      .doOnDispose(() -> System.out.println("onDispose"));

    Disposable disposable = observable.subscribe();
    disposable.dispose();    
}

private void bar() {
    System.out.println("bar");
}

doOnSubcribe被调用,doOnDispose不被调用。

这是为什么?

4

1 回答 1

32

您需要使用doFinally()运算符。

doOnDispose()有一个非常狭窄的用例,其中 observable 被显式处理。在您的示例中,可观察对象“自然地”终止于onComplete(). 到你调用的时候dispose(),observable 已经完成了,什么都不会发生——处理一个完成的 observable 没有任何效果。

于 2018-03-07T14:26:19.807 回答