Je suis nouveau sur RxJava et LeakCanary, donc cela pourrait être quelque chose de simple (j'espère).JetableCompletableObserver fuite d'activité même si j'efface CompositeDisposable
Essentiellement, j'ai une activité qui comprend un CompositeDisposable
. Je reçois l'instance de mon référentiel Singleton et l'utilise pour obtenir un Completable
qui est ajouté au CompositeDisposable
.
Dans onPause, j'efface le CompositeDisposable
qui, selon ce que je pense, évitera toute fuite de mémoire de l'objet appelant (dans ce cas, une activité).
Malheureusement, après l'installation de LeakCanary, il signale que cette activité est divulguée dans le référentiel via le Completable
.
Qu'est-ce que je fais mal? Quand je le google, je ne vois rien d'extra que les gens font.
Remarque:
Normalement, je reçois une observable de mon dépôt via un AndroidViewModel
, mais dans ce cas j'utilise mon activité Paramètres qui a une obligation de faire un appel au référentiel. Il ne nécessite pas de ViewModel.
Quoi qu'il en soit, à cause de cela, LeakCanary a pu remarquer que l'activité avait été divulguée. Si je ne me trompe pas par défaut, il ne serait pas capable de le faire sur mes ViewModels à moins que je ne le leur dise.
Alors peut-être que tout le reste est également divulgué, mais je ne suis tout simplement pas au courant. Ok, je viens de regarder l'un de mes AndroidViewModel et bien sûr qu'il fuit aussi (selon LeakCanary). Il semble que je fasse quelque chose de mal ou que LeakCanary montre un faux positif.
Toute aide appréciée. Merci.
code tel que demandé (mise à jour):
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 Screenshot:
Veuillez fournir du code. – akarnokd
@akarnokd fait. –
@akarnokd des idées? –