Sobes.tech
Middle+

LeakCanary qanday qilib o'chirilgan Activitylarga havolalarni aniqlaydi?

sobes.tech AI

AIdan javob

LeakCanary za'if foydalanadi zaif (Phantom Reference) yoki kuchli (Strong Reference) havola maydonini maxsus kuzatuvchi ichida, u "quloq soladi" Activity ning hayot aylanishiga. Activity yo'q qilinganda, LeakCanary vaqtni yozib oladi va axlat yig'ishni kutadi. Agar axlat yig'ishdan keyin Activity obyekti hali ham xotirada bo'lsa, LeakCanary xotira dumpini (heap dump) boshlaydi, uni tahlil qiladi va GC Roots dan bu "oqib" Activity ga erishish uchun grafik quradi.

Asosiy bosqichlar:

  1. Hayot aylanishini kuzatish: LeakCanary ActivityLifecycleCallbacks ni ro'yxatdan o'tkazadi.
  2. Belgilanadi (Bookmarking): onDestroy() chaqirilganda, LeakCanary Activity ga (versiyasiga qarab) havola yaratadi va vaqtni yozib oladi.
  3. GC ni kutish: LeakCanary, ob'ekt yo'q qilinishini tekshirish uchun, axlat yig'ishni kutadi.
  4. GC dan keyingi tekshirish: Agar Activity obyekti GC dan keyin ham mavjud bo'lsa, bu ehtimoliy oqibga ishora qiladi.
  5. Heap dump: LeakCanary Debug.dumpHprofData() ni chaqiradi va hozirgi xotira holatini saqlaydi.
  6. Dump tahlili: LeakCanary (Memory Analyzer Tool (MAT) yoki o'z tahlilchisi orqali) heap dump ni skanerlash.
  7. Yo'l topish: Asbob GC Roots dan "oqib" ob'ektgacha bo'lgan yo'llarni topadi.
  8. Hisobot: LeakCanary o'qilishi oson hisobot ishlab chiqaradi, u ob'ektni GC dan ushlab turadigan havola zanjirini ko'rsatadi.