2016-04-25 20 views
5

Üzerinde çalıştığım uygulamada bir DialogFragmentte bir bellek sızıntısı görüyorum ve şu ana kadar DialogFragment yok olduğunda tüm görünümleri kaldırmanın tek yolu budur, bu normal bir şeydir yapmak zorunda? Özel bir ROM ile çalışıyorum bu yüzden belki de bu sorunla bir ilgisi olup olmadığından emin değildim. İletişim kutusundaki tüm görünümlerin kaldırılmasının bellek sızıntısına neden olmamasının bir sebebi var mı?DialogFragment sızdırıyor bellek

@Override 
    public void onDestroyView() { 
     if (getView() instanceof ViewGroup) { 
      ((ViewGroup)getView()).removeAllViews(); 
     } 
     super.onDestroyView(); 
    } 
+1

da root olmayan telefon üzerinde denemelisiniz –

cevap

4

MemoryLeak birçok nedenden, bazı yaygın nedenlerinden dolayı ortaya çıkabilir:

  • bazı statik alanlar kodunu (DialogFragment bu durumda örneğinde) Nesnenizin referansını tutun.
  • Geçiş Context AsyncTask Konu veya konu da GC root çünkü!
  • Sınıfınız statik olmayan bir iç sınıfa sahiptir, bu durumda GC root ile ilgili iç sınıf (örneğin iç sınıf AsyncTask örneğiyse) durumunda bellek sızıntısı oluşur.

Sizin durumunuzda, GC root'la ilgili bir görüşünüz olabilir, bu görünümde çöpler toplanamaz.

5

Bu benim Uygulamamda da oluyor ve Leakcanary kullanarak sızıntıyı buldum.

EditText ile bir Diyalogunuz olduğunda gerçekleşir. Bir Geri Çağırma kullanılarak uygulanan İmlecin Göz Kırpması, EditText'i içeren Görünümü kapatırken doğru şekilde ele alınmaz. Ve buna göre tesadüfen olur.

https://code.google.com/p/android/issues/detail?id=188551

Düzenleme

Ve bunun ne kadar her dialog.dismiss() önce ne: Bu yardımcı olur

editText.setCursorVisible(false); 
dismiss(); 

Umut! Onaylamak için

İlgili konular