Pozbądź się abonentów na Androida

(10 stycznia 2019)

RxJava i Android, zapomnij o wycieku pamięci

W naszym biurze mamy wiele projektów, potrzebujemy aktualizacji, przechodzimy do Java8 i zauważamy, że ten komunikat jest wszędzie:

Ta okropna wiadomość

Cóż, krótkie wyjaśnienie jest takie, że pojawia się ta wiadomość, ponieważ Android Studio nie wie, jakie efekty może mieć Twoja subskrypcja, gdy nie zostanie wyrzucona, więc traktuje to jako niebezpieczne. Na przykład Twój Single może zawierać wywołanie sieciowe, które może spowodować wyciek pamięci, jeśli Activity zostanie porzucone podczas wykonywania. problem, który możemy rozwiązać.

Sposobem na rozwiązanie naszego problemu jest użycie CompositeDisposable , który zapewnia jednorazowy pojemnik, który może pomieścić wiele innych jednorazowe. Musisz dodać wszystkie swoje produkty jednorazowe do CompositeDisposable, po zakończeniu subskrypcji musisz wywołać metodę dispose()

Więc zacznijmy, jeśli korzystasz z MVP, musimy utworzyć BaseActivity, które mają zostać rozszerzone przez wszystkie nasze działania, potrzebujemy go również dla Fragments, ale magia przydarzy się prezenterom, oczywiście możesz użyć CompositeDisposable za każdym razem, ale będziesz się często powtarzać, więc tak będzie aby wygodniej zarządzać dużą ilością Disposable"s

Musimy utworzyć BaseActivity, jeśli potrzebuję ich BaseFragment sprawdź ten link

BaseActivity

Dla prezentera sprawy są podobne, ale zamierzamy rozszerzyć interfejs, który zamierzamy stworzyć d poniżej, w BasePresenter utworzymy instancję CompositeDisposable

Podczas zwykłego działania lub fragmentu ustaw prezentera

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

Na koniec musisz utworzyć zmienną, kiedy dzwonisz do swojego obserwowalnego lub subskrybenta, i dodajesz ją za pomocą metody safeAdd() w interfejsie:

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

}, {
//Error on logout

})
safeAdd(logoutDisposable)

Dzięki temu upewniasz się, że subskrybenci nie powodują żadnych wycieków pamięci i zauważysz lepszą wydajność swojej aplikacji.

Jeśli potrzebujesz pomocy , Zawsze chętnie pomogę, możesz mnie znaleźć tutaj:
Medium: (https://medium.com/@dinorahto)
StackOverflow: https : //stackoverflow.com/users/4613259/dinorah-tovar

Miłego kodowania! 👩🏻‍💻