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

  1. Az életciklus figyelése: A LeakCanary regisztrálja az ActivityLifecycleCallbacks-t.
  2. 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.
  3. 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.
  4. 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.
  5. Heap dump: A LeakCanary meghívja a Debug.dumpHprofData()-t, hogy elmentse a memória aktuális állapotát.
  6. 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.
  7. Út keresése: Az eszköz megtalálja az utat az objektum gráfban a GC gyökereitől az "elveszett" objektumig.
  8. 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.