Sobes.tech
Middle+

Ինչպե՞ս է LeakCanary-ը որոշում՝ հղումները ոչնչացված Activity-ներին:

sobes.tech AI

Պատասխան AI-ից

LeakCanary օգտագործում է թույլ (Phantom Reference) կամ ուժեղ (Strong Reference) հղում հատուկ դիտորդում, որը "լսում" է Activity-ի կյանքի ցիկլը։ Երբ Activity-ն ոչնչացվում է, LeakCanary-ն գրանցում է ժամանակը և սպասում է աղբի հավաքմանը։ Եթե աղբի հավաքումից հետո Activity օբյեկտը դեռևս հիշողության մեջ է, LeakCanary-ը սկսում է հիշողության արտահոսքի (heap dump), այն վերլուծում և կառուցում է հասանելիության գրաֆիկ, որպեսզի գտնի GC Roots-ից դեպի այդ "լքված" Activity-ի ճանապարհը։

Հիմնական քայլեր՝

  1. Կյանքի ցիկլի հսկում: LeakCanary-ը գրանցում է ActivityLifecycleCallbacks։
  2. Նշում (Bookmarking): onDestroy() կանչելու ժամանակ, LeakCanary-ը ստեղծում է հղում Activity-ին (վերսիայի վրա կախված) և գրանցում ժամանակը։
  3. GC սպասում: LeakCanary-ը սպասում է, որ տեղի ունենա աղբի հավաքում, որպեսզի ստուգի, արդյոք օբյեկտը ոչնչացվել է։
  4. Հետագա ստուգում GC-ից հետո: Եթե Activity օբյեկտը դեռ հասանելի է GC-ից հետո, դա ցույց է տալիս հնարավոր արտահոսք։
  5. Heap dump: LeakCanary-ը կանչում է Debug.dumpHprofData()՝ հիշողության ընթացիկ վիճակը պահպանելու համար։
  6. Անալիզի վերլուծություն: LeakCanary-ը (մատչելի Memory Analyzer Tool (MAT) կամ սեփական վերլուծաբանի միջոցով) սկանավորում է heap dump-ը։
  7. Մատնանշում ճանապարհը: Գործիքը գտնում է ճանապարհներ GC Roots-ից դեպի "լքված" օբյեկտ։
  8. Հաշվետվություն: LeakCanary-ը ստեղծում է ընթերցանելի հաշվետվություն, որը ցույց է տալիս հղումների շղթան, որը պահում է օբյեկտը դուրս գցող հավաքիչից։