Bellek sızıntıları ve bunlara neyin sebep olabileceği konusunda temel bir bilgim var. Bu yüzden benim kodumda bir sorun var mı yoksa yanlış bir pozitif mi anlamıyorum. Proje küçük olmadığından kodun hangi kısmını paylaşmam gerektiğini bilmiyorum. Ama sadece yorumlarda bana bildirin ve gerekli kodu ekleyeceğim.
Navigasyon arch bileşenini kullanıyorum ve MVVM modelini takip ediyorum. LeakCanary kütüphanesini daha sonra projenin geliştirilmesinde ekledim ve ekranlar arasında gezindiğimde hemen muhafaza edilen örnekler hakkında uyarılar vermeye başladı.
Arka yığını parçaları eklediğimde sorun oluşur. Arka istifin her ilave parçasında tutulan örneklerin sayacı artar. 5 eşik değerine ulaştığında, LeakCanary yığını atar ve rapor sağlar.
Ancak geri düğmesine tıklayıp önceki ekranlara dönersem, muhafaza edilen örneklerin sayacı azalır ve sonunda, 1. ekrana geri döndüğünde tüm muhafaza edilen örnekler kaybolur.
Ben yığın analiz raporları bakarsanız, CoordinatorLayout
xml içinde bir referans olan değişken coordinatorLayout sızdırılmış diyor . Değişkeni ve tüm kullanımını kaldırır ve uygulamayı tekrar çalıştırırsam aynı sorunu görüyorum, ancak şimdi xml'de başka bir görünüme başvuru olan başka bir değişkenle. LeakCanary'nin sızıntı olarak bildirdiği tüm görünümleri ve kullanımlarını kaldırmaya çalıştım. Bir dediğimde TextView
sadece bir metin olarak ayarlamak için kullanılan, onViewCreated
ve başka hiçbir yerde kullanılan, benim kodda bir sorun olduğunu şüphe etmeye başladı sızıyor.
Yaşam döngüsü yöntemi çağrılarını parçalar halinde analiz ettim ve önceki parça için yeni ekrana gittiğimde onDestroyView
, çağrılana kadar olan ve olmayan tüm yöntemlerin farkına vardım onDestroy
. Geri tıkladığımda onDestroy
, arka yığının üstündeki parça denir ve tutulan örnekler sayacı azalır.
Gezinme bileşeninin bir yığın örneğini arka yığıntayken tuttuğundan ve LeakCanary'nin bir sızıntı olarak gördüğünden şüpheleniyorum.
onDestroyView
Görünüm Bağlama ile 'boş' olup olmadığını hakkında herhangi bir belge bulamıyorum .