为什么 doOnDispose 没有被调用?

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");
}

doOnSubscribe 被调用,但 doOnDispose 没有被调用。

为什么会这样?

1个回答

36

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

doOnDispose()有一个非常狭窄的用例,即可观察对象被显式处理。在您的示例中,可观察对象通过onComplete()“自然”终止。在调用dispose()时,可观察对象已完成,并且不会发生任何事情 - 处理已完成的可观察对象没有效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接