Middle+
Come rileva LeakCanary i riferimenti alle Activity distrutte?
sobes.tech AI
Risposta dell'AI
LeakCanary utilizza un riferimento debole (Reference Fantasma) o un riferimento forte (Reference Forte) in un osservatore speciale che "ascolta" il ciclo di vita dell'Activity. Quando l'Activity viene distrutta, LeakCanary registra l'ora e aspetta la raccolta dei rifiuti. Se, dopo la raccolta, l'oggetto Activity esiste ancora in memoria, LeakCanary avvia un dump della heap, lo analizza e costruisce un grafo di raggiungibilità per trovare il percorso dalle GC Roots a questa Activity "fuggita".
Passaggi chiave:
- Monitoraggio del ciclo di vita: LeakCanary registra
ActivityLifecycleCallbacks. - Segnalibro (Bookmarking): Al chiamare
onDestroy(), LeakCanary crea un riferimento all'Activity (a seconda della versione) e registra l'ora. - Attesa del GC: LeakCanary aspetta che avvenga la raccolta dei rifiuti per verificare se l'oggetto è stato distrutto.
- Verifica post-GC: Se l'oggetto Activity è ancora accessibile dopo il GC, indica una potenziale fuga.
- Dump della heap: LeakCanary chiama
Debug.dumpHprofData()per salvare lo stato attuale della memoria. - Analisi del dump: LeakCanary (tramite Memory Analyzer Tool (MAT) o il suo analizzatore) scansiona il dump della memoria.
- Ricerca del percorso: Lo strumento trova percorsi nel grafo di oggetti dagli elementi radice GC fino all'oggetto "fuggente".
- Rapporto: LeakCanary genera un rapporto leggibile che mostra la catena di riferimenti che mantiene l'oggetto fuori dal GC.