Kassera prenumeranter på Android

(10 jan 2019)

RxJava och Android, glöm minnesläckage

Här på kontoret har vi flera projekt som behöver en uppdatering, vi flyttar till Java8 och vi märker att vi har detta meddelande överallt:

Det här hemska meddelandet

Tja, den korta förklaringen är att det här meddelandet visas eftersom Android Studio inte vet vilka effekter din prenumeration kan ha när den inte avyttras, så det behandlar det som osäkert. Till exempel kan ditt Single innehålla ett nätverkssamtal, vilket kan orsaka minnesläckage om din Activity överges under dess körning, detta representerar ett problem som vi kan lösa.

Ett sätt att lösa vårt problem är att använda CompositeDisposable som ger en engångsbehållare som kan hålla i flera andra engångsartiklar. Du måste lägga till alla dina Disposables i CompositeDisposable, när du är klar med din prenumeration måste du ringa metoden dispose()

Så låt oss komma igång, om du använder MVP måste vi skapa en BaseActivity som alla våra aktiviteter kommer att utvidga, vi behöver en för Fragments, men magin kommer att hända på presentatörerna, naturligtvis kan du använda en CompositeDisposable varje gång, men du kommer att upprepa dig mycket, så det här går för att vara ett bekvämare sätt att hantera en stor mängd Disposable"s

Vi måste skapa en BaseActivity behöver dem BaseFragment kontrollera den här länken

BaseActivity

För presentatören liknar sakerna men vi kommer att utöka ett gränssnitt som vi ska skapa d nedan, i a BasePresenter ska vi skapa förekomsten av CompositeDisposable

På din vanliga aktivitet eller fragment, se till att ställa in presentatören

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

Slutligen måste du skapa en variabel när du ringer till din observerbara eller prenumerant och lägga till variabeln med safeAdd() -metoden i gränssnittet:

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

}, {
//Error on logout

})
safeAdd(logoutDisposable)

Med detta ser du till att din prenumerant inte orsakar minnesläckage och att du kommer att märka bättre prestanda i din app.

Om du behöver hjälp , Jag är alltid glad att hjälpa dig, du hittar mig här:
Medium: (https://medium.com/@dinorahto)
StackOverflow: https : //stackoverflow.com/users/4613259/dinorah-tovar

Happy Coding! 👩🏻‍💻