Sobes.tech
Middle+

Kako LeakCanary prepoznaje reference na uništene Activity?

sobes.tech АИ

Одговор од АИ

LeakCanary koristi slab (Phantom Reference) ili snažnu (Strong Reference) referencu u posebnom posmatraču koji "sluša" životni ciklus Activity. Kada se Activity uništi, LeakCanary beleži vreme i čeka na sakupljanje smeća. Ako nakon sakupljanja smeća objekat Activity i dalje postoji u memoriji, LeakCanary pokreće dump memorije (heap dump), analizira ga i pravi graf dostupnosti da pronađe put od GC Roots do tog "curenog" Activity.

Ključni koraci:

  1. Praćenje životnog ciklusa: LeakCanary registruje ActivityLifecycleCallbacks.
  2. Obeležavanje (Bookmarking): Pri pozivu onDestroy(), LeakCanary pravi referencu na Activity (zavisno od verzije) i beleži vreme.
  3. Čekanje GC: LeakCanary čeka da se dogodi sakupljanje smeća da proveri da li je objekat uništen.
  4. Provera posle GC: Ako je objekat Activity i dalje dostupan posle GC, to ukazuje na potencijalni curenje.
  5. Heap dump: LeakCanary poziva Debug.dumpHprofData() da sačuva trenutni status memorije.
  6. Analiza dump-a: LeakCanary (kroz Memory Analyzer Tool (MAT) ili sopstveni analizator) skenira dump memorije.
  7. Traženje puta: Alat pronalazi puteve u grafu objekata od GC Roots do "curenog" objekta.
  8. Izveštaj: LeakCanary generiše čitljiv izveštaj koji prikazuje lanac referenci koji drži objekat van sakupljača smeća.