簡體   English   中英

RxJava 2如何處理內部可觀測對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM