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.
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.
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 Disposable
s, 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 Disposable
s qui ont été ajoutés. Si vous souhaitez supprimer tous les Disposable
s et actuels, tous les Disposable
s 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 Disposable
s que vous ajoutez soient supprimés.
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.