Sobes.tech
Middle+

Kā LeakCanary nosaka saites uz iznīcinātām Activity?

sobes.tech AI

Atbilde no AI

LeakCanary izmanto vājo (Phantom Reference) vai stipru (Strong Reference) atsauci īpašā novērotājā, kas "uzklausa" Activity dzīves ciklu. Kad Activity tiek iznīcināta, LeakCanary reģistrē laiku un gaida atkritumu savākšanu. Ja pēc atkritumu savākšanas objekts Activity joprojām pastāv atmiņā, LeakCanary uzsāk atmiņas dumpu (heap dump), to analizē un veido pieejamības grafiku, lai atrastu ceļu no GC saknēm uz šo "izplūdušo" Activity.

Galvenie soļi:

  1. Dzīves cikla uzraudzība: LeakCanary reģistrē ActivityLifecycleCallbacks.
  2. Atzīmēšana (Bookmarking): Izsaucot onDestroy(), LeakCanary izveido atsauci uz Activity (atkarībā no versijas) un reģistrē laiku.
  3. Gaida GC: LeakCanary gaida, līdz notiek atkritumu savākšana, lai pārbaudītu, vai objekts ir iznīcināts.
  4. Pēc GC pārbaude: Ja objekts Activity joprojām ir pieejams pēc GC, tas norāda uz potenciālo noplūdi.
  5. Heap dump: LeakCanary izsauc Debug.dumpHprofData(), lai saglabātu pašreizējo atmiņas stāvokli.
  6. Dump analīze: LeakCanary (caur Memory Analyzer Tool (MAT) vai savu analītiķi) skenē heap dump.
  7. Ceļa meklēšana: Instruments atrod ceļus grafā no GC saknēm līdz "izplūdušajam" objektam.
  8. Ziņojums: LeakCanary ģenerē lasāmu ziņojumu, kas rāda saites ķēdi, kas tur objektu prom no atkritumu savākšanas.