Middle+
Ինչպե՞ս է LeakCanary-ը որոշում՝ հղումները ոչնչացված Activity-ներին:
sobes.tech AI
Պատասխան AI-ից
LeakCanary օգտագործում է թույլ (Phantom Reference) կամ ուժեղ (Strong Reference) հղում հատուկ դիտորդում, որը "լսում" է Activity-ի կյանքի ցիկլը։ Երբ Activity-ն ոչնչացվում է, LeakCanary-ն գրանցում է ժամանակը և սպասում է աղբի հավաքմանը։ Եթե աղբի հավաքումից հետո Activity օբյեկտը դեռևս հիշողության մեջ է, LeakCanary-ը սկսում է հիշողության արտահոսքի (heap dump), այն վերլուծում և կառուցում է հասանելիության գրաֆիկ, որպեսզի գտնի GC Roots-ից դեպի այդ "լքված" Activity-ի ճանապարհը։
Հիմնական քայլեր՝
- Կյանքի ցիկլի հսկում: LeakCanary-ը գրանցում է
ActivityLifecycleCallbacks։ - Նշում (Bookmarking):
onDestroy()կանչելու ժամանակ, LeakCanary-ը ստեղծում է հղում Activity-ին (վերսիայի վրա կախված) և գրանցում ժամանակը։ - GC սպասում: LeakCanary-ը սպասում է, որ տեղի ունենա աղբի հավաքում, որպեսզի ստուգի, արդյոք օբյեկտը ոչնչացվել է։
- Հետագա ստուգում GC-ից հետո: Եթե Activity օբյեկտը դեռ հասանելի է GC-ից հետո, դա ցույց է տալիս հնարավոր արտահոսք։
- Heap dump: LeakCanary-ը կանչում է
Debug.dumpHprofData()՝ հիշողության ընթացիկ վիճակը պահպանելու համար։ - Անալիզի վերլուծություն: LeakCanary-ը (մատչելի Memory Analyzer Tool (MAT) կամ սեփական վերլուծաբանի միջոցով) սկանավորում է heap dump-ը։
- Մատնանշում ճանապարհը: Գործիքը գտնում է ճանապարհներ GC Roots-ից դեպի "լքված" օբյեկտ։
- Հաշվետվություն: LeakCanary-ը ստեղծում է ընթերցանելի հաշվետվություն, որը ցույց է տալիս հղումների շղթան, որը պահում է օբյեկտը դուրս գցող հավաքիչից։