为什么不调用 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 没有任何效果。
像这样创建 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 没有任何效果。