Sobes.tech
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:

  1. Sledování životního cyklu: LeakCanary registruje ActivityLifecycleCallbacks.
  2. Značení (Bookmarking): Při volání onDestroy() LeakCanary vytvoří odkaz na Activity (závisí na verzi) a zaznamená čas.
  3. Čekání na GC: LeakCanary čeká na provedení sběru odpadu, aby ověřil, zda byl objekt zničen.
  4. Kontrola po GC: Pokud je objekt Activity stále dostupný po GC, naznačuje to potenciální únik.
  5. Heap dump: LeakCanary volá Debug.dumpHprofData() pro uložení aktuálního stavu paměti.
  6. Analýza dumpu: LeakCanary (přes Memory Analyzer Tool (MAT) nebo vlastní analyzátor) prohledá dump paměti.
  7. Hledání cesty: Nástroj najde cesty v grafu objektů od GC Roots k "uniklému" objektu.
  8. Zpráva: LeakCanary generuje čitelnou zprávu, která ukazuje řetězec odkazů, který drží objekt mimo sběr odpadu.