2017-08-09 4 views
0

J'ai une question à propos de la disposition sur RxJava. J'ai trouvé cette phrase ci-dessous sur le document RxSwift sur Github.RxJava2 auto dispose-t-il d'observable quand l'appel est terminé ou en cas d'erreur?

Lorsqu'une séquence envoie l'événement completed ou error toutes les ressources internes qui calculent des éléments de séquence seront libérés.

Pour annuler immédiatement la production d'éléments de séquence et de ressources gratuites, appelez la commande disposer sur l'abonnement renvoyé.

si je comprends bien les ressources (observables) seront libérés après qu'ils appellent onCompleted ou onError.

Donc, la question est, est-ce que RxJava fait la même chose que RxSwift ou que je dois appeler la disposition par moi-même?

Merci

Répondre

4

Oui, toutes les ressources associées seront automatiquement éliminées. Pour illustrer l'exécution du test suivant avec 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); 
}