Middle+
Ako LeakCanary deteguje odkazy na zničené Activity?
sobes.tech AI
Odpoveď od AI
LeakCanary používa slabé (Phantom Reference) alebo silné (Strong Reference) referenčné pole v špeciálnom pozorovateľovi, ktorý "počúva" životný cyklus Activity. Keď je Activity zničená, LeakCanary zaznamená čas a čaká na zber odpadu. Ak po zbere odpadu objekt Activity stále existuje v pamäti, LeakCanary spustí dump zásobníka (heap dump), analyzuje ho a vytvorí graf dostupnosti, aby našiel cestu od GC Roots k tomuto "uniknutému" Activity.
Kľúčové kroky:
- Monitorovanie životného cyklu: LeakCanary registruje
ActivityLifecycleCallbacks. - Značenie (Bookmarking): Pri volaní
onDestroy()LeakCanary vytvorí odkaz na Activity (závisí od verzie) a zaznamená čas. - Čakanie na GC: LeakCanary čaká na vykonanie zberu odpadu, aby overil, či bol objekt zničený.
- Kontrola po GC: Ak je objekt Activity stále dostupný po GC, naznačuje to potenciálny únik.
- Heap dump: LeakCanary volá
Debug.dumpHprofData()na uloženie aktuálneho stavu pamäte. - Analýza dumpu: LeakCanary (cez Memory Analyzer Tool (MAT) alebo vlastný analyzátor) prehľadá dump pamäte.
- Hľadanie cesty: Nástroj nájde cesty v grafe objektov od GC Roots k "uniknutému" objektu.
- Správa: LeakCanary generuje čitateľnú správu, ktorá ukazuje reťazec odkazov, ktorý drží objekt mimo zberača odpadu.