1
votes

Mon application se bloque lors de l'utilisation de leak canary - pourquoi?

Je travaille sur une application Android TV dans laquelle j'ai utilisé Leak Canary Library mais le problème est que lorsque j'utilise mon après un certain temps, une erreur "Dumping Memory. App Freeze. Brrrr" s'affiche. J'ai cherché sur Google tout ce qui était suggéré, mais j'obtiens quand même l'erreur.

Dans le manifeste, j'ai donné l'autorisation d'écrire et de lire le stockage.

Code pour la classe d'application:

        @Override
protected void onDestroy() {

    if (timer != null) {
        timer.cancel();
        timer = null;
    }
    if (handler != null)
        handler.removeCallbacks(Update);
    super.onDestroy();


    RefWatcher refWatcher = App.getRefWatcher(this);
    refWatcher.watch(this);
}

Et dans mon activité et mes fragments, j'ai utilisé RefWatcher dans OnDestroy ().

i.e.

     public class App extends Application {

private RefWatcher refWatcher;

public static RefWatcher getRefWatcher(Context context) {
    App application = (App) context.getApplicationContext();
    return application.refWatcher;
}

@Override
public void onCreate() {
    super.onCreate();
    refWatcher = LeakCanary.install(this);

}

Mais j'obtiens toujours une erreur de vidage de la mémoire. Veuillez aider.


0 commentaires

3 Réponses :


-1
votes

LeakCanary utilisant différents types de dépendances.

private void initLeakCanary() {
    if (LeakCanary.isInAnalyzerProcess(this))
        return;
    LeakCanary.install(this);
}

Si votre application est en phase de sortie , la bibliothèque n'apparaîtra jamais "Dumping Memory. App Freeze. Brrrr".

Voici mon exemple de init LeakCanary. Dans la classe Application () , dans la méthode onCreate () , j'appelle

debugImplementation "com.squareup.leakcanary:leakcanary-android:1.6.2"
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:1.6.2"
debugImplementation "com.squareup.leakcanary:leakcanary-support-fragment:1.6.2"


2 commentaires

J'ai utilisé votre code mais en mode débogage, il génère toujours la même erreur. ne lancera-t-il pas de bogue en mode version.


@mishti Non, en mode release il ne lancera rien.



1
votes

Comme le message le suggère, LeakCanary gèle l'application pour vider sa mémoire actuelle pour analyse. C'est un comportement normal et intentionnel. Vous devriez recevoir une notification avec plus de détails concernant les fuites potentielles détectées. Vous pouvez également consulter l'application "Leaks" ou la sortie logcat de votre application pour plus de détails.


0 commentaires

1
votes

LeakCanary, comme vous le savez probablement, est destiné à détecter les fuites de mémoire dans votre application. Quand il affiche le message "Dumping Memory. App Freeze. Brrrr" -Message ce n'est pas parce que vous avez mal configuré LeakCanary, mais parce que LeakCanary fonctionne comme prévu et a détecté une fuite.

L'application se fige car LeakCanary doit enregistrer l'état actuel de chaque thread dans l'application et la mémoire pour ensuite vous donner un rapport sur la fuite qu'il a détectée.

Vous voyez donc ce message signifie que votre application a des fuites de mémoire qui doivent être réparées. Vérifiez le rapport que vous obtenez pour cette fuite dans l'application "Fuites", votre sortie logcat ou en cliquant sur la notification qui apparaît. Vous y trouverez des détails sur ce qui a fui.


0 commentaires