[英]How are inner observables disposed in RxJava 2?
对不起,如果以前已回答过此问题,但是从我的搜索中我找不到它,我真的很想了解它是如何工作的-如果可以的话...
假设我有一个PublishSubject,它需要这样的字符串:
PublishSubject<String> trigger = PublishSubject.create();
我将其与另一个可观察到的一起使用:
Observable<String> obs1 = trigger.filter(new Predicate<String>(){
@Override
public boolean test(String s) throws Exception{
return s != null;
}
});
Observable<String> obs2 = Observable.create(new ObservableOnSubscribe<String>(){
@Override
public void subscribe(final ObservableEmitter<String> e) throws Exception {
//When/is this ever disposed?
obs1.subscribe(new Consumer<String>(){
@Override
public void accept(String s){
//Never called after obs1 is disposed.
e.onNext(s);
}
}
}
});
//A
Disposable disposable = obs2.subscribe(new Consumer<String>(){
public void accept(String s){
System.out.println(s);
}
});
trigger.onNext("Holahoop"); //Above "A" is called.
disposable.dispose();
trigger.onNext("Hakuna Matata"); //Nothing happens.
调用了obs1预订,调用了e.onNext,但由于已将其处置-调用跟踪在此处结束。
完全不调用Obs 1订阅。 即使我还没有明确取消订阅。
这是为什么? 它会自动退订/出售吗? 放置外部可观察物时是否为GCd? 请赐教!
注意1:这是使用RxJava 2.0.0-RC3。
注2:伪代码,对于某些错误(如果有),非常抱歉。
可以正常工作。 如果将System.out.println(s)
放到obs2
您会看到它收到了“ Hakuna Matata”,但obs2
您已经obs2
了它的obs2
,因此不会进一步中继它。 如果您保留对任何局部变量的引用,它们将不会被垃圾收集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.