为什么不调用doOnDispose?

时间:2018-03-07 14:17:00

标签: java rx-java2

创建像这样的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

为什么?

1 个答案:

答案 0 :(得分:15)

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

doOnDispose()有一个非常狭窄的用例,其中明确处理了observable。在您的示例中,observable由onComplete()“自然地”终止。当你调用dispose()时,observable就完成了,什么都不会发生 - 处理完成的observable没有效果。