私はRxJavaとLeakCanaryを初めて使いました。DisposableCompletableObserverがCompositeDisposableをクリアしていてもアクティビティがリークしています
本質的に私はCompositeDisposable
を含むアクティビティを持っています。私は自分のシングルトンリポジトリのインスタンスを取得し、それをに追加するCompletable
を得るために使用します。
私は、呼び出し元のオブジェクト(この場合はアクティビティ)のメモリリークを避けるために、私が考えているCompositeDisposable
をクリアします。
残念ながら、LeakCanaryをインストールした後、このアクティビティがCompletable
経由でリポジトリにリークされたことが報告されます。
私は間違っていますか?それをグーグルで調べると、私は人々がやっている余分なものは見ません。
注:
通常、私は、しかし、この場合には、私はリポジトリへの呼び出しを1つにする必要性を持っている私の設定アクティビティを使用しています、AndroidViewModel
を経由して私のリポジトリから、観察を取得します。 ViewModelは不要です。
とにかく、このLeakCanaryによって、アクティビティがリークしたことが分かりました。私がデフォルトで間違っていない場合、私はそれを言わない限り、ViewModelsでこれを行うことはできません。
おそらく他のすべてがリークされていますが、私はそれを認識していません。私はAndroidViewModelの1つを見ただけで、漏れていることも十分に確かめられています(LeakCanaryによる)。私は何か間違っているか、LeakCanaryが偽陽性を示しているようです。
助けてください。おかげさまで 要求されたよう
コード(更新):
private CompositeDisposable mSubscriptions;
@Override
public void onCreate(Bundle savedInstanceState) {
...
mSubscriptions = new CompositeDisposable();
...
}
@Override
protected void onPause() {
super.onPause();
mSubscriptions.clear();
}
public void someMethodForButtonClick(View view) {
IwcRepository iwcRepository =
Injection.provideIwcRepository(getApplication());
mSubscriptions.add(iwcRepository.getSomeCompletable()
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableCompletableObserver() {
@Override
public void onComplete() {
}
@Override
public void onError(@NonNull Throwable e) {
}
}));
}
LeakCanaryスクリーンショット:
コメントで述べたように、私はCompositeDisposableを除去することによって、このエラーを解決して
コードを入力してください。 – akarnokd
@akarnokdしました。 –
@akarnokdどのアイデア? –