Sobes.tech
Middle+

LeakCanary nasıl yok edilen Activity'lere referansları belirler?

sobes.tech yapay zeka

AI'dan gelen yanıt

LeakCanary, zayıf (Phantom Reference) veya güçlü (Strong Reference) referans alan özel bir gözlemci kullanır ve bu gözlemci "dinler" Activity'nin yaşam döngüsünü. Activity yok edildiğinde, LeakCanary zamanı kaydeder ve çöp toplamayı bekler. Çöp toplamadan sonra Activity nesnesi hâlâ bellekte varsa, LeakCanary bir yığın dökümü (heap dump) başlatır, analiz eder ve GC Kökleri'nden bu "sızmış" Activity'ye ulaşan yolu bulmak için erişilebilirlik grafiği oluşturur.

Ana adımlar:

  1. Yaşam döngüsünün izlenmesi: LeakCanary, ActivityLifecycleCallbacks kaydeder.
  2. Yer imi (Bookmarking): onDestroy() çağrıldığında, LeakCanary Activity'ye (sürümüne bağlı olarak) bir referans oluşturur ve zamanı kaydeder.
  3. GC'yi bekleme: LeakCanary, nesnenin yok edilip edilmediğini kontrol etmek için çöp toplamayı bekler.
  4. GC sonrası kontrol: Çöp toplamadan sonra Activity nesnesi hâlâ erişilebilir ise, bu potansiyel bir sızıntıya işaret eder.
  5. Yığın dökümü: LeakCanary, Debug.dumpHprofData() çağırır ve mevcut bellek durumunu kaydeder.
  6. Döküm analizi: LeakCanary (Memory Analyzer Tool (MAT) veya kendi analizörü aracılığıyla) yığın dökümünü tarar.
  7. Yol arama: Araç, GC Kökleri'nden "sızmış" nesneye kadar olan nesne grafiğinde yolları bulur.
  8. Rapor: LeakCanary, nesneyi çöp toplamadan tutan referans zincirini gösteren okunabilir bir rapor üretir.