为什么不调用 doOnDispose?

Why is doOnDispose not called?

像这样创建 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不被调用。

这是为什么?

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

doOnDispose() 有一个非常狭窄的用例,其中显式处理了 observable。在您的示例中,可观察对象以 onComplete() 终止 "naturally"。当您调用 dispose() 时,observable 已完成,什么也不会发生——处置已完成的 observable 没有任何效果。