Middle+
Jak LeakCanary detekuje odkazy na zničené Activity?
sobes.tech AI
Odpověď od AI
LeakCanary používá slabý (Phantom Reference) nebo silný (Strong Reference) odkaz v speciálním pozorovateli, který "poslouchá" životní cyklus Activity. Když je Activity zničena, LeakCanary zaznamená čas a čeká na sběr odpadu. Pokud po sběru odpadu objekt Activity stále existuje v paměti, LeakCanary spustí dump zásobníku (heap dump), analyzuje ho a vytvoří graf dosažitelnosti, aby našel cestu od GC Roots k této "uniklé" Activity.
Klíčové kroky:
- Sledování životního cyklu: LeakCanary registruje
ActivityLifecycleCallbacks. - Značení (Bookmarking): Při volání
onDestroy()LeakCanary vytvoří odkaz na Activity (závisí na verzi) a zaznamená čas. - Čekání na GC: LeakCanary čeká na provedení sběru odpadu, aby ověřil, zda byl objekt zničen.
- Kontrola po GC: Pokud je objekt Activity stále dostupný po GC, naznačuje to potenciální únik.
- Heap dump: LeakCanary volá
Debug.dumpHprofData()pro uložení aktuálního stavu paměti. - Analýza dumpu: LeakCanary (přes Memory Analyzer Tool (MAT) nebo vlastní analyzátor) prohledá dump paměti.
- Hledání cesty: Nástroj najde cesty v grafu objektů od GC Roots k "uniklému" objektu.
- Zpráva: LeakCanary generuje čitelnou zprávu, která ukazuje řetězec odkazů, který drží objekt mimo sběr odpadu.