为什么不调用 doOnDispose?

2022-09-03 09:35:40

创建可观察量时,如下所示:

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

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

doOnDispose()有一个非常狭窄的用例,其中可观察量被显式释放。在您的示例中,可观察量由 “自然地” 终止。当你调用时,可观察量已经完成,并且不会发生任何事情 - 处理一个完整的可观察量没有任何效果。onComplete()dispose()


答案 2

推荐