2017-08-09 64 views
0

我對RxJava的處置有疑問。我在Github上的RxSwift文檔中找到了下面這句話。RxJava2在調用complete或error時會自動處理observable嗎?

當一個序列發送completederror事件時,所有計算序列元素的內部資源都將被釋放。

要立即取消序列元素和空閒資源的生產,請在返回的訂閱上調用dispose。

如果我理解正確,資源(觀察對象)將在他們撥打onCompletedonError後被釋放。

所以問題是,RxJava和RxSwift做的一樣嗎?或者我需要自己調用dispose?

謝謝

回答

4

是的,所有相關資源都會自動處理。爲了說明使用RxJava 2運行下列測試:

boolean isDisposed = false; 

@Test 
public void testDisposed(){ 
    TestObserver<Integer> to = Observable.<Integer>create(subscriber -> { 
     subscriber.setDisposable(new Disposable() { 

      @Override 
      public boolean isDisposed() { 
       return isDisposed; 
      } 

      @Override 
      public void dispose() { 
       isDisposed = true; 
      } 
     }); 
     subscriber.onComplete(); 
    }).test(); 

    to.assertComplete(); 
    assertTrue(isDisposed); 
} 
相關問題