0

我正在开发一个应用程序(不是我编写的),它的活动由三个选项卡组成,每个选项卡对应于自己的片段(我以前从未使用过片段)。每个选项卡/片段显示消耗大量内存的数据结构。我想确信,当我从一个选项卡切换到另一个选项卡时,传出选项卡/片段所消耗的内存已完全释放。在下一个启动之前。

比如说,传出片段显示了一个位图 - 首先执行 bitmap.release() 以确保片段释放其所有内存是否必不可少?

4

1 回答 1

0

监听标签控制器上的标签更改事件。

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));
            }
        }
    }
}
于 2013-03-16T21:32:40.180 回答