Androidでサブスクライバーを破棄する

2019年1月10日)

RxJavaとAndroid、メモリリークを忘れる

オフィスには、複数のプロジェクトがあります。更新が必要な場合は、Java8に移行すると、次のメッセージがどこにでも表示されます:

この恐ろしいメッセージ

簡単に説明すると、このメッセージが表示されます。これは、Android Studioが、サブスクリプションが破棄されない場合にどのような影響があるかを認識していないためです。そのため、安全ではないものとして扱います。たとえば、Singleにネットワーク呼び出しが含まれている可能性があります。これにより、Activityが実行中に破棄された場合、メモリリークが発生する可能性があります。解決できる問題。

問題を解決する方法は、他の複数のコンテナを保持できる使い捨てコンテナを提供する CompositeDisposable を使用することです。使い捨て。すべてのDisposableをCompositeDisposableに追加する必要があります。サブスクリプションが終了したら、メソッドdispose()

を呼び出す必要があります。 MVPを使用している場合は、すべてのアクティビティを拡張するBaseActivityを作成する必要があります。Fragmentsにも1つ必要ですが、プレゼンターには魔法が起こります。もちろん、毎回 CompositeDisposable を使用できますが、何度も繰り返すので、これを繰り返します。大量のDisposable"s

を管理するためのより便利な方法として、BaseActivityを作成する必要があります。それらが必要ですBaseFragment このリンク

を確認してください
BaseActivity

プレゼンターの場合は似ていますが、作成するインターフェイスを拡張します以下のdで、a BasePresenterに、 CompositeDisposable

通常のアクティビティまたはフラグメントで、必ずプレゼンターを設定してください

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

最後に、オブザーバブルまたはサブスクライバーを呼び出すときに変数を作成し、インターフェースでsafeAdd()メソッドを使用して変数を追加する必要があります。

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

}, {
//Error on logout

})
safeAdd(logoutDisposable)

これにより、サブスクライバーがメモリリークを引き起こしていないことを確認し、アプリのパフォーマンスが向上することに気付くでしょう。

ヘルプが必要な場合、私はいつでも喜んでお手伝いします。ここで私を見つけることができます:
中:(https://medium.com/@dinorahto)
StackOverflow: https ://stackoverflow.com/users/4613259/dinorah-tovar

ハッピーコーディング! 👩🏻‍💻