Je pose cette question dans une perspective Android, mais cela devrait s'appliquer à RxJava en général.
En tant que meilleure pratique, si ma vue doit toujours disposer même de courte durée Completable
, Single
, Maybe
et se terminant Observable
types Rx qui doivent terminer en peu de temps, mais pourrait-il toujours être en cours d'exécution lorsque l'utilisateur ferme la vue? Je sais que lorsque la chaîne Rx se termine, elle est supprimée, mais cela peut potentiellement se produire quelque temps après la fermeture de la vue.
Par exemple, un Single
qui exécute un HTTP GET. L'appel se terminera, mais il se peut que la vue soit détruite, ce qui empêche temporairement la récupération de place.
Et si un CompositeDisposable
est utilisé pour collecter de tels Disposable
s dans une vue de longue durée, je pense qu'il faudrait faire attention à clear()
ou autrement supprimer ces Disposable
s régulièrement pour empêcher une croissance illimitée de la taille de CompositeDisposable
?
En tant que meilleure pratique, si mon point de vue devait toujours éliminer les types Rx observables, même de courte durée, à durée de vie unique, peut-être et à terminaison
Si vous partagez le code avec d'autres, comme meilleure pratique, je vais dire oui, vous devez vous en débarrasser. Bien que cela puisse sembler une plaque de chaudière supplémentaire, cela empêchera le prochain développeur d'essayer de se connecter au code de votre abonnement et d'essayer d'accéder à des composants qui peuvent ne plus exister (c'est-à-dire un Context
après un Fragment
est détaché ... etc).
Et si un CompositeDisposable est utilisé pour collecter ces objets jetables dans une vue à longue durée de vie, je pense qu'il faudrait prendre soin de supprimer () ou de supprimer ces éléments jetables régulièrement pour éviter une croissance illimitée de la taille de CompositeDisposable?
Je tiens à souligner que dans rxjava2, CompositeDisposable
s ont un état; une fois que vous appelez dispose()
, tout Disposable
ajouté sera immédiatement supprimé. Donc, comme meilleure pratique:
CompositeDisposable
au début du cycle de vie (onCreate(...)
etc)dispose()
dans onDestroy(...)
car à ce stade, votre rappel n'a pratiquement plus de valeur et se contente de conserver des ressources.Il est recommandé de supprimer CompositeDisposable
dans onPause
ou onDestroy
pour éviter de tels problèmes.