Middle+
Comment LeakCanary détecte-t-il les références aux Activities détruites?
sobes.tech IA
Réponse de l'IA
LeakCanary utilise une référence faible (Référence Fantôme) ou une référence forte (Référence Forte) dans un observateur spécial qui "écoute" le cycle de vie de l'Activity. Lorsque l'Activity est détruite, LeakCanary enregistre l'heure et attend la collecte des déchets. Si, après la collecte, l'objet Activity existe toujours en mémoire, LeakCanary effectue un dump de la mémoire (heap dump), l'analyse et construit un graphique d'accessibilité pour trouver le chemin depuis les racines GC jusqu'à cette Activity "fuitée".
Étapes clés:
- Surveillance du cycle de vie: LeakCanary enregistre
ActivityLifecycleCallbacks. - Marquage (Bookmarking): Lors de l'appel à
onDestroy(), LeakCanary crée une référence à l'Activity (selon la version) et enregistre l'heure. - Attente du GC: LeakCanary attend que la collecte de déchets se produise pour vérifier si l'objet a été détruit.
- Vérification après GC: Si l'objet Activity est toujours accessible après le GC, cela indique une fuite potentielle.
- Dump de la mémoire: LeakCanary appelle
Debug.dumpHprofData()pour sauvegarder l'état actuel de la mémoire. - Analyse du dump: LeakCanary (via Memory Analyzer Tool (MAT) ou son propre analyseur) scanne le dump de mémoire.
- Recherche de chemin: L'outil trouve des chemins dans le graphe d'objets depuis les éléments racine GC jusqu'à l'objet "fuit".
- Rapport: LeakCanary génère un rapport lisible montrant la chaîne de références qui maintient l'objet hors du GC.