如何在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.o onnext,但由于它已被处置-调用跟踪到此结束。

现实

Obs 1订阅没有被调用。即使我没有明确地取消订阅

我的问题

为什么?它是否自动取消订阅/在引擎盖下处理?当外部可观察对象被处理时,它是GCd吗?请开导我!

注1:这是使用RxJava 2.0.0-RC3。

注2:伪代码,很抱歉稍有错误

工作正常。如果您将System.out.println(s)放入obs2,您将看到它接收"Hakuna Matata",但由于您处置了其消费者,因此不会进一步中继它。如果您保留对任何局部变量的引用,它们将不会被垃圾收集。

相关内容

  • 没有找到相关文章

最新更新