Middle+
Hogyan észleli a LeakCanary az elpusztult Activity-kre való hivatkozásokat?
sobes.tech MI
Válasz az MI-től
A LeakCanary gyenge (Phantom Reference) vagy erős (Strong Reference) referenciát használ egy speciális megfigyelőben, amely "hallgat" az Activity életciklusára. Amikor az Activity megsemmisül, a LeakCanary rögzíti az időt és várja a szemétgyűjtést. Ha a szemétgyűjtés után az Activity objektum még mindig létezik a memóriában, a LeakCanary elindít egy heap dump-ot, elemzi azt, és elérhetőségi gráfot épít, hogy megtalálja az utat a GC gyökereitől az "elveszett" Activity-hez.
Fő lépések:
- Az életciklus figyelése: A LeakCanary regisztrálja az
ActivityLifecycleCallbacks-t. - Jelölés (Bookmarking): Az
onDestroy()hívásakor a LeakCanary létrehoz egy referenciát az Activity-hez (a verziótól függően), és rögzíti az időt. - GC várása: A LeakCanary arra vár, hogy megtörténjen a szemétgyűjtés, hogy ellenőrizze, az objektum megsemmisült-e.
- GC utáni ellenőrzés: Ha az Activity objektum még elérhető a GC után, az potenciális szivárgásra utal.
- Heap dump: A LeakCanary meghívja a
Debug.dumpHprofData()-t, hogy elmentse a memória aktuális állapotát. - A dump elemzése: A LeakCanary (a Memory Analyzer Tool (MAT) vagy saját elemzője segítségével) átvizsgálja a heap dump-ot.
- Út keresése: Az eszköz megtalálja az utat az objektum gráfban a GC gyökereitől az "elveszett" objektumig.
- Jelentés: A LeakCanary olvasható jelentést generál, amely megmutatja azokat a láncokat, amelyek az objektumot a szemétgyűjtéstől távol tartják.