web-dev-qa-db-fra.com

Qu'est-ce que CompositeDisposable dans RxJava?

Je suis un étudiant Android. Je veux apprendre RxJava. Ma question est "Qu'est-ce que CompositeDisposable dans RxJava?". S'il vous plaît décrire en détail.

10
Tester

Le composite jetable facilite l'élimination (pensez à annuler tôt). Supposons que vous ayez une activité comportant plusieurs appels api simultanés:

var disposable = api.call1(arg1, arg2).subscribe(...)
var disposable2 = api.call2(arg1).subscribe(...)
var disposable3 = api.call3().subscribe()

Si vous devez vous débarrasser prématurément (par exemple, l'utilisateur doit s'éloigner de l'activité), procédez comme suit:

disposable.dispose()
disposable2.dispose()
disposable3.dispose()

Si vous utilisez plutôt un CompositeDisposable, vous pouvez y stocker tous les produits jetables. Ainsi:

val composite = CompositeDisposable()
composite.add(api.call1(arg1, arg2).subscribe(...))
composite.add(api.call2(arg1).subscribe(...))
composite.add(api.call3().subscribe())

Et puis vous pouvez faire un appel à la place:

composite.dispose()

Si vous utilisez kotlin, vous pouvez utiliser la surcharge d'opérateur pour rendre cette image plus agréable:

fun CompositeDisposable.plusAssign(disposable: Disposable){
    this.add(disposable)
}

Ce qui vous permet de l'exprimer comme:

val composite = CompositeDisposable()
composite += api.call1(arg1, arg2).subscribe(...)
composite += api.call2(arg1).subscribe(...)
composite += api.call3().subscribe()

Disable signifie une demande (pensez au travail en cours) et dispose d'une méthode appelée disposer pour disposer de la demande.

18
Jim Baca

CompositeDisposable est juste une classe pour garder tous vos produits jetables au même endroit. Comme:

Disposable disposable1;
Disposable disposable2;
Disposable disposable3;

CompositeDisposable composite = new CompositeDisposable();
composite.addAll(disposable1, disposable2, disposable3)
composite.dispose()

Tous sont ensuite disposés

CompositeDisposable est une classe pratique pour regrouper plusieurs Disposables, afin que vous puissiez les disposer tous avec un seul appel de méthode sur CompositeDisposable.

Vous pouvez ajouter des articles jetables à un CompositeDisposable avec CompositeDisposable#add

Au lieu d'appeler dispose() sur chaque Disposable individuellement, vous appelez CompositeDisposable#clear() pour éliminer tous les Disposables qui ont été ajoutés. Si vous souhaitez supprimer tous les Disposables et actuels, tous les Disposables ajoutés ultérieurement, appelez CompositeDisposable#dispose(). Cela a du sens, vous supprimez littéralement le CompositeDisposable lorsque vous appelez dispose() dessus, il est donc logique que tous les Disposables que vous ajoutez soient supprimés.

1
Andrew Gallasch

L'ajout à CompositeDisposable ci-dessus offre une complexité d'espace-temps cohérente de O(n) indépendamment de l'ajout et de la suppression de multiples éléments à usage unique, qui est également effacé lorsque l'activité ou le fragment est détruit. 

0
Ajay Deepak