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