Android垃圾收集无法收集,导致视觉故障

时间:2016-08-02 16:01:51

标签: android android-fragments memory-management garbage-collection

我正在创建一个带有导航抽屉和fragements的Android应用程序。但是当我加载一个包含大量资源的视图,或者使用大量的画布绘图(在本例中为图形,For the Graphs I'm using this lib)时,导航抽屉卡住了几毫秒,所以我做了一些研究,我发现了当我关闭片段时,我应该释放我在片段中使用的所有视图。所以这是我为所有片段做的例子 的 GRAPHFRAGMENT

public class GraphFragment() extends Fragment{
        private MainActivity parrentActivity;
        private View view;
        private Callback callback;
        private SystemInfoTask systemInfoTask;
        private SwipeRefreshLayout swipeRefreshLayout;
        private LineGraph ramGraph;
        private Button ramBtn;
        private LineGraph cpuGraph;
        private Button cpuBtn;
        private LineGraph lan1Graph;
        private Button lan1Btn;
        private LineGraph lan2Graph;
        private Button lan2Btn;

    private void defineViews() {
        swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swiperefresh_layout);
        ramGraph = (LineGraph) view.findViewById(R.id.ram_graph);
        cpuGraph = (LineGraph) view.findViewById(R.id.cpu_graph);
        lan1Graph = (LineGraph) view.findViewById(R.id.lan1_graph);
        lan2Graph = (LineGraph) view.findViewById(R.id.lan2_graph);
        ramBtn = (Button) view.findViewById(R.id.ram_btn);
        cpuBtn = (Button) view.findViewById(R.id.cpu_btn);
        lan1Btn = (Button) view.findViewById(R.id.lan1_btn);
        lan2Btn = (Button) view.findViewById(R.id.lan2_btn);
    }

    @Override
    public void onDestroyView() {
        swipeRefreshLayout = null;
        ramGraph = null;
        cpuGraph = null;
        lan1Graph = null;
        lan2Graph = null;
        ramBtn = null;
        cpuBtn = null;
        lan1Btn = null;
        lan2Btn = null;
        super.onDestroyView();
    }

    @Override
    public void onDetach() {
        super.onDetach();
        if (neworktask!= null) {
            neworktask.cancel();
            neworktask= null;
        }
    }
}

所以在那之后我认为故障应该消失,因为garbadge收集器可以收集我的整个片段,因为alle引用已经消失了。所以当我运行我的应用程序并创建这个例子时

默认开放碎片   - 现在我打开导航抽屉 pic 1   - 现在我用图表 pic 2 打开我的片段   - 然后我再次打开导航抽屉以再次打开第一个片段。 pic 3   - 这就是我做了几次并检查了我的记忆    android studio中的分析器 pic 4

最后一张照片是我的记忆分析器 pic 5

黑色箭头打开图片段 黄色的错误是启动垃圾收集

请帮助我,我做错了什么?

PIC 1 - > pic 1

pic 2

pic 3

pic 4

pic 5

0 个答案:

没有答案