Middle+
Kaip LeakCanary nustato nužudytų Activity nuorodas?
sobes.tech AI
Atsakymas iš AI
LeakCanary naudoja silpną (Phantom Reference) arba stiprią (Strong Reference) nuorodą specialiame stebėtojuje, kuris "klauso" Activity gyvavimo ciklo. Kai Activity yra sunaikinama, LeakCanary įrašo laiką ir laukia šiukšlių surinkimo. Jei po šiukšlių surinkimo Activity objektas vis dar egzistuoja atmintyje, LeakCanary pradeda atminties dump'ą (heap dump), jį analizuoja ir kuria prieinamumo diagramą, kad rastų kelią nuo GC šaknų iki šio "nutekėjusio" Activity.
Pagrindiniai žingsniai:
- Gyvavimo ciklo stebėjimas: LeakCanary registruoja
ActivityLifecycleCallbacks. - Žymėjimas (Bookmarking): Kviečiant
onDestroy(), LeakCanary sukuria nuorodą į Activity (priklausomai nuo versijos) ir įrašo laiką. - Laukiama GC: LeakCanary laukia, kol įvyks šiukšlių surinkimas, kad patikrintų, ar objektas buvo sunaikintas.
- Po GC patikrinimas: Jei Activity objektas vis dar pasiekiamas po GC, tai rodo galimą nutekėjimą.
- Heap dump: LeakCanary kviečia
Debug.dumpHprofData(), kad išsaugotų dabartinę atminties būseną. - Dump analizė: LeakCanary (per Memory Analyzer Tool (MAT) arba savo analizatorių) skenuoja heap dump'ą.
- Kelių paieška: Įrankis randa kelią grafe nuo GC šaknų iki "nutekėjusio" objekto.
- Ataskaita: LeakCanary generuoja skaitomą ataskaitą, rodantį nuorodų grandinę, kuri laiko objektą nuo šiukšlių surinkimo.