繁体   English   中英

标签/片段和内存泄漏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM