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