2013-03-16 48 views
0

我正在開發一個應用程序(不是我寫的),它有一個由三個選項卡組成的活動,每個選項卡都對應於它自己的片段(我以前從未使用片段)。每個選項卡/片段都顯示消耗大量內存的數據結構。我想確信,當我從一個標籤頁切換到另一個標籤頁/片段消耗的內存被完全釋放時。在下一個啓動之前。標籤/片段和內存泄漏

所以說,例如有一個位圖正在顯示的傳出片段 - 是否必須先做一個bitmap.release()以確保片段釋放其所有內存?

回答

0

監聽選項卡控制器上的選項卡更改事件。

tabLayout.setOnTabChangedListener(<listener>); 
你的聽衆 (onTabChanged(int index, boolean isUserInput))的回調方法

,讓以前的片段,呼籲解除綁定可繪製其在遞歸途觀(u需要寫吧)。完成之後,您也可以撥打System.gc()給Dalvik VM提示運行垃圾回收器(只是提示,不保證)。爲解除綁定

示例代碼:

public static void unbindDrawables(@Nullable View view) { 
    if (view == null) { 
     return; 
    } 

    if (view.getBackground() != null) { 
     view.getBackground().setCallback(null); 
    } 

    if (view instanceof ImageView && ((ImageView) view).getDrawable() != null) { 
     ((ImageView) view).getDrawable().setCallback(null); 
    } 

    if (view instanceof ViewGroup) { 
     if (view instanceof AbsListView) { 
      // Clean out list view 
      List<View> cells = Lists.newLinkedList(); 
      ((AbsListView) view).reclaimViews(cells); 
      if (cells != null) { 
       for (View c : cells) { 
        unbindDrawables(c); 
       } 
      } 
     } else { 
      for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
       unbindDrawables(((ViewGroup) view).getChildAt(i)); 
      } 
     } 
    } 
}