0
我正在開發一個應用程序(不是我寫的),它有一個由三個選項卡組成的活動,每個選項卡都對應於它自己的片段(我以前從未使用片段)。每個選項卡/片段都顯示消耗大量內存的數據結構。我想確信,當我從一個標籤頁切換到另一個標籤頁/片段消耗的內存被完全釋放時。在下一個啓動之前。標籤/片段和內存泄漏
所以說,例如有一個位圖正在顯示的傳出片段 - 是否必須先做一個bitmap.release()以確保片段釋放其所有內存?
我正在開發一個應用程序(不是我寫的),它有一個由三個選項卡組成的活動,每個選項卡都對應於它自己的片段(我以前從未使用片段)。每個選項卡/片段都顯示消耗大量內存的數據結構。我想確信,當我從一個標籤頁切換到另一個標籤頁/片段消耗的內存被完全釋放時。在下一個啓動之前。標籤/片段和內存泄漏
所以說,例如有一個位圖正在顯示的傳出片段 - 是否必須先做一個bitmap.release()以確保片段釋放其所有內存?
監聽選項卡控制器上的選項卡更改事件。
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));
}
}
}
}