Zlikvidujte předplatitele v systému Android

(10. ledna 2019)

RxJava a Android, zapomeňte na únik paměti

Tady v kanceláři máme několik projektů, které potřebujeme aktualizaci, přejdeme na Java8 a všimneme si, že tuto zprávu máme všude:

Tato hrozná zpráva

Krátké vysvětlení je takové, že se tato zpráva zobrazí, protože Android Studio neví, jaké účinky může mít vaše předplatné, když nebude odstraněno, považuje to za nebezpečné. Například váš Single může obsahovat síťové volání, které by mohlo způsobit únik paměti, pokud během jeho provádění opustíte Activity, toto představuje problém, který můžeme vyřešit.

Způsob, jak vyřešit náš problém, je použití CompositeDisposable , který poskytuje jednorázový kontejner, který pojme několik dalších jednorázové. Musíte přidat všechny své jednorázové položky do CompositeDisposable, až dokončíte předplatné, musíte zavolat metodu dispose()

Takže pojďme začít, pokud používáte MVP, musíme vytvořit BaseActivity, které všechny naše aktivity rozšíří, potřebujeme jeden i pro Fragments, ale kouzlo se stane u moderátorů, samozřejmě můžete použít CompositeDisposable pokaždé, ale budete se hodně opakovat, takže to bude jako pohodlnější způsob správy velkého množství Disposable"s

Musíme vytvořit BaseActivity potřebujete BaseFragment zkontrolujte tento odkaz

BaseActivity

U moderátora jsou věci podobné, ale chystáme rozšířit rozhraní, které chceme vytvořit d níže, v BasePresenter vytvoříme instanci CompositeDisposable

Ve své běžné aktivitě nebo fragmentu nezapomeňte nastavit moderátora

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

Nakonec musíte vytvořit proměnnou, když zavoláte pozorovatelovi nebo předplatiteli, a přidat proměnnou pomocí metody safeAdd() na rozhraní:

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

}, {
//Error on logout

})
safeAdd(logoutDisposable)

Tímto způsobem zajistíte, aby vaši předplatitelé nezpůsobovali úniky paměti, a zjistíte lepší výkon své aplikace.

Pokud potřebujete pomoc „Vždy rád pomůžu, najdete mě zde:
Střední: (https://medium.com/@dinorahto)
StackOverflow: https : //stackoverflow.com/users/4613259/dinorah-tovar

Veselé kódování! 👩🏻‍💻