Descartar assinantes no Android

(10 de janeiro de 2019)

RxJava e Android, esqueça os vazamentos de memória

Aqui no escritório, temos vários projetos que precisamos de uma atualização, mudamos para Java8 e notamos que temos esta mensagem em todos os lugares:

Esta mensagem horrível

Bem, a breve explicação é que esta mensagem aparece porque o Android Studio não sabe quais os efeitos que sua assinatura pode ter quando não é descartada, por isso, ele o considera inseguro. Por exemplo, seu Single pode conter uma chamada de rede, o que pode causar um vazamento de memória se seu Activity for abandonado durante sua execução, isso representa um problema que podemos resolver.

Uma maneira de resolver nosso problema é usando CompositeDisposable que fornece um recipiente descartável que pode conter vários outros descartáveis. Você precisa adicionar todos os seus descartáveis ​​ao CompositeDisposable, quando terminar sua assinatura, você deve chamar o método dispose()

Então, vamos começar, se você está usando MVP, precisamos criar um BaseActivity que todas as nossas atividades vão estender, precisamos de um para o Fragments também, mas a mágica vai acontecer nos apresentadores, é claro que você pode usar um CompositeDisposable todas as vezes, mas você vai se repetir muito, então isso vai para ser uma maneira mais conveniente de gerenciar uma grande quantidade de Disposable"s

Precisamos criar um BaseActivity se você precisa deles BaseFragment verifique este link

BaseActivity

Para o apresentador, as coisas são semelhantes, mas vamos estender uma interface que vamos criar d abaixo, no a BasePresenter, vamos criar a instância do CompositeDisposable

Em sua atividade ou fragmento regular, certifique-se de definir o apresentador

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

Finalmente, você deve criar uma variável ao chamar seu observável ou assinante e adicionar a variável usando o método safeAdd() na interface:

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

}, {
//Error on logout

})
safeAdd(logoutDisposable)

Com isso, você garante que seus assinantes não estão causando nenhum vazamento de memória e notará um melhor desempenho em seu aplicativo.

Se precisar de ajuda , Estou sempre feliz em ajudar, você pode me encontrar aqui:
Médio: (https://medium.com/@dinorahto)
StackOverflow: https : //stackoverflow.com/users/4613259/dinorah-tovar

Boa codificação! 👩🏻‍💻