[英]tabs / fragments and memory leak
我正在开发一个应用程序(不是我写的),该应用程序的活动由三个选项卡组成,每个选项卡都对应于其自己的片段(我以前从未使用过片段)。 每个选项卡/片段都显示消耗大量内存的数据结构。 我想确信,当我从一个选项卡切换到另一个选项卡时,传出的选项卡/片段消耗的内存已完全释放。 在下一个开始之前。
例如,假设传出的片段正在显示一个位图-首先执行bitmap.release()以确保该片段释放了其所有内存是否必不可少?
在选项卡控制器上侦听选项卡更改事件。
tabLayout.setOnTabChangedListener(<listener>);
在您的侦听器的回调方法(onTabChanged(int index, boolean isUserInput))
,获取上一个片段,以递归的方式在其视图上调用unbind drawable(您需要编写它)。 完成之后,您还可以调用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));
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.