我正在开发一个应用程序(不是我编写的),它的活动由三个选项卡组成,每个选项卡对应于自己的片段(我以前从未使用过片段)。每个选项卡/片段显示消耗大量内存的数据结构。我想确信,当我从一个选项卡切换到另一个选项卡时,传出选项卡/片段所消耗的内存已完全释放。在下一个启动之前。
比如说,传出片段显示了一个位图 - 首先执行 bitmap.release() 以确保片段释放其所有内存是否必不可少?
我正在开发一个应用程序(不是我编写的),它的活动由三个选项卡组成,每个选项卡对应于自己的片段(我以前从未使用过片段)。每个选项卡/片段显示消耗大量内存的数据结构。我想确信,当我从一个选项卡切换到另一个选项卡时,传出选项卡/片段所消耗的内存已完全释放。在下一个启动之前。
比如说,传出片段显示了一个位图 - 首先执行 bitmap.release() 以确保片段释放其所有内存是否必不可少?
监听标签控制器上的标签更改事件。
tabLayout.setOnTabChangedListener(<listener>);
在您的侦听器的回调方法上(onTabChanged(int index, boolean isUserInput))
,获取上一个片段,以递归方式在其视图上调用 unbind drawables(您需要编写它)。完成后,您还可以调用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));
}
}
}
}