Eliminați abonatul pe Android

(10 ianuarie 2019)

RxJava și Android, uitați de scurgerile de memorie

Aici în birou avem mai multe proiecte care avem nevoie de o actualizare, trecem la Java8 și observăm că avem acest mesaj peste tot:

Acest mesaj oribil

Ei bine, scurta explicație este că acest mesaj apare pentru că Android Studio nu știe ce efecte poate avea abonamentul dvs. atunci când nu este eliminat, deci îl tratează ca fiind nesigur. De exemplu, Single poate conține un apel de rețea, care ar putea provoca o scurgere de memorie dacă Activity este abandonat în timpul executării sale, aceasta reprezintă o problemă pe care o putem rezolva.

O modalitate de a rezolva problema noastră este utilizarea CompositeDisposable care oferă un container de unică folosință care poate ține pe altele de unică folosință. Trebuie să adăugați toate produsele de unică folosință la CompositeDisposable, când ați terminat cu abonamentul, trebuie să apelați metoda dispose()

Deci, începeți, dacă folosiți MVP, trebuie să creăm un BaseActivity pe care toate activitățile noastre îl vor extinde, avem nevoie de unul și pentru Fragments, dar magia se va întâmpla la prezentatori, bineînțeles că puteți folosi de fiecare dată un CompositeDisposable , dar veți repeta mult, așa că acest lucru se întâmplă pentru a fi o modalitate mai convenabilă de a gestiona o cantitate mare de Disposable"s

Trebuie să creăm un BaseActivity ai nevoie de ele BaseFragment vă rugăm să verificați acest link

BaseActivity

Pentru prezentator lucrurile sunt similare, dar vom extinde o interfață pe care o vom crea d mai jos, în a BasePresenter vom crea instanța CompositeDisposable

În activitatea sau fragmentul dvs. obișnuit, asigurați-vă că setați prezentatorul

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

În cele din urmă, trebuie să creați o variabilă atunci când vă apelați observabilul sau abonatul și să adăugați variabila utilizând metoda safeAdd() pe interfață:

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

}, {
//Error on logout

})
safeAdd(logoutDisposable)

Cu aceasta, vă asigurați că abonatul dvs. nu provoacă scurgeri de memorie și veți observa performanțe mai bune în aplicația dvs.

Dacă aveți nevoie de ajutor , Mă bucur întotdeauna să vă ajut, mă puteți găsi aici:
Medium: (https://medium.com/@dinorahto)
StackOverflow: https : //stackoverflow.com/users/4613259/dinorah-tovar

Happy Coding! 👩🏻‍💻