我正在创建一个带有导航抽屉和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
黑色箭头打开图片段 黄色的错误是启动垃圾收集
请帮助我,我做错了什么?