2016-04-25 45 views
5

在我正在處理的應用程序中,我看到DialogFragment中存在內存泄漏,並且到目前爲止修復它的唯一方法是在DialogFragment被破壞時刪除所有視圖,這是正常的事情要做什麼?我正在使用自定義ROM,因此不確定是否可能與此問題有關。是否有任何理由不刪除對話框中的所有視圖會導致他們泄漏內存?DialogFragment泄漏內存

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

要確認它,您還應該嘗試使用無根電話 –

回答

4

MemoryLeak可能發生的原因很多,一些常見的原因:

  • 請一些靜態字段您的對象的引用(在你DialogFragment的這種情況實例)。
  • 通行證Context主題的AsyncTask因爲線程也GC root
  • 您的類有非靜態的內部類,在這種情況下,如果內部類與GC根相關(例如,如果內部類是AsyncTask的實例),則會發生內存泄漏。

在你的情況下,也許你有一個與GC根相關的視圖,而該視圖不能被垃圾收集,你的對話框保留視圖也不能被垃圾收集。

5

這發生在我的應用程序,我發現泄漏使用Leakcanary。

它發生在具有EditText的對話框中時。關閉包含EditText的View時,使用回調實現的Cursor的Blink處理不當。根據這一點偶然發生。

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

編輯

這是怎麼樣我每天dialog.dismiss()之前做:

editText.setCursorVisible(false); 
dismiss(); 

希望這有助於!