Dispose labonné sur Android

(10 janvier 2019)

RxJava et Android, oubliez les fuites de mémoire

Ici, au bureau, nous avons plusieurs projets qui besoin dune mise à jour, nous passons à Java8, et nous remarquons que nous avons ce message partout:

Ce message horrible

Eh bien, la brève explication est que ce message apparaît car Android Studio ne sait pas quels effets votre abonnement peut avoir lorsquil nest pas supprimé, il le traite donc comme dangereux. Par exemple, votre Single peut contenir un appel réseau, ce qui pourrait provoquer une fuite de mémoire si votre Activity est abandonné lors de son exécution, cela représente un problème que nous pouvons résoudre.

Un moyen de résoudre notre problème consiste à utiliser CompositeDisposable qui fournit un conteneur jetable pouvant contenir plusieurs autres jetables. Vous devez ajouter tous vos produits jetables au CompositeDisposable, lorsque vous avez terminé votre abonnement, vous devez appeler la méthode dispose()

Alors commençons, si vous utilisez MVP, nous devons créer un BaseActivity que toutes nos activités vont étendre, nous en avons besoin pour le Fragments aussi, mais la magie va se produire sur les présentateurs, bien sûr, vous pouvez utiliser un CompositeDisposable à chaque fois, mais vous allez vous répéter beaucoup, alors ça va pour être un moyen plus pratique de gérer une grande quantité de Disposable"s

Nous devons créer un BaseActivity si vous en ont besoin BaseFragment veuillez vérifier ce lien

BaseActivity

Pour le présentateur les choses sont similaires mais nous allons étendre une interface que nous allons créer d ci-dessous, dans le a BasePresenter nous allons créer linstance du CompositeDisposable

Sur votre activité ou fragment normal, assurez-vous de définir le présentateur

presenter = YourPresenter(yourRepository, yourActivityInterface)
setPresenter(presenter)

Enfin, vous devez créer une variable lorsque vous appelez votre observable ou abonné, et ajoutez la variable en utilisant la méthode safeAdd() sur linterface:

val logoutDisposable = yourRepository.logout().subscribe({
//Succesful logout

}, {
//Error on logout

})
safeAdd(logoutDisposable)

Avec cela, vous vous assurez que votre abonné ne cause aucune fuite de mémoire et vous remarquerez de meilleures performances sur votre application.

Si vous avez besoin daide , Je « suis toujours heureux de vous aider, vous pouvez me trouver ici:
Medium: (https://medium.com/@dinorahto)
StackOverflow: https : //stackoverflow.com/users/4613259/dinorah-tovar

Bon codage! 👩🏻‍💻