Middle+
Jak LeakCanary wykrywa odniesienia do zniszczonych Activity?
sobes.tech AI
Odpowiedź od AI
LeakCanary używa słabego (Referencja Fantomowa) lub silnego (Referencja Silna) pola referencyjnego w specjalnym obserwatorze, który "słucha" cyklu życia Activity. Gdy Activity jest niszczona, LeakCanary rejestruje czas i czeka na garbage collection. Jeśli po garbage collection obiekt Activity nadal istnieje w pamięci, LeakCanary inicjuje zrzut stosu (heap dump), analizuje go i tworzy graf dostępności, aby znaleźć ścieżkę od GC Roots do tego "wyciekającego" Activity.
Kluczowe kroki:
- Monitorowanie cyklu życia: LeakCanary rejestruje
ActivityLifecycleCallbacks. - Zakładanie (Bookmarking): Podczas wywołania
onDestroy(), LeakCanary tworzy odniesienie do Activity (w zależności od wersji) i zapisuje czas. - Oczekiwanie na GC: LeakCanary czeka na wykonanie garbage collection, aby sprawdzić, czy obiekt został zniszczony.
- Sprawdzenie po GC: Jeśli obiekt Activity nadal jest dostępny po GC, wskazuje to na potencjalny wyciek.
- Zrzut pamięci: LeakCanary wywołuje
Debug.dumpHprofData()w celu zapisania aktualnego stanu pamięci. - Analiza zrzutu: LeakCanary (przez Memory Analyzer Tool (MAT) lub własny analizator) skanuje zrzut pamięci.
- Wyszukiwanie ścieżki: Narzędzie znajduje ścieżki w grafie obiektów od GC Roots do "wyciekającego" obiektu.
- Raport: LeakCanary generuje czytelny raport, pokazujący łańcuch referencji, który utrzymuje obiekt z dala od garbage collection.