这是我的刷新图表数据的代码:
public void showLineChart(final List<String> xAxisValues, final List<List<String>> yAxisValues,
final List<String> labels, List<Integer> colours) {
lineChart.resetTracking();
final List<String> xa = new ArrayList<>(xAxisValues);
markerView.setCallBack(new CustomMarkerView.CallBack() {
@Override
public void onCallBack(float x, String value) {
int index = (int) (x);
if (index < 0) {
return;
}
String textTemp = "";
if (yAxisValues.size() > 1) {
textTemp = "室外:" + yAxisValues.get(1).get(index);
markerView.getTextViewOutdoor().setText(textTemp);
markerView.getLl().setVisibility(View.VISIBLE);
}
textTemp = "室内:" + yAxisValues.get(0).get(index);
markerView.getTextViewIndoor().setText(textTemp);
markerView.getTextViewDate().setText(xa.get(index));
markerView.setAlpha((float) 0.7);
}
});
MyCustomXAxisValueFormatter formatter = new MyCustomXAxisValueFormatter(xAxisValues);
xAxis.setValueFormatter(formatter);
List<ILineDataSet> dataSets = new ArrayList<>();
for (int i = 0; i < yAxisValues.size(); i++) {
List<Entry> entries = new ArrayList<>();
List<String> values=new ArrayList<>(yAxisValues.get(i));
if(values.size()>0){
for (int j = 0; j < values.size(); j++) {
if (j >= xAxisValues.size()) {
j = xAxisValues.size() - 1;
}
if (j>-1&&values.get(j)!=null){
entries.add(new Entry(j, Float.parseFloat(values.get(j))));
}
}
if (i<labels.size()){
LineDataSet lineDataSet = new LineDataSet(entries, labels.get(i));
initLineDataSet(lineDataSet, colours.get(i), false);
dataSets.add(lineDataSet);
}
}
}
LineData data = new LineData(dataSets);
xAxis.setLabelCount(xAxisValues.size(), true);
lineChart.setData(data);
lineChart.invalidate();
}
我已经阅读了Github的演示,但这不能解决问题:
这样的控制台中有很多错误:
I / zygote64:后台并发复制GC释放了661970(20MB)AllocSpace对象,0(0B)个LOS对象,57%空闲,8MB / 20MB,已暂停855us,总计101.178ms
一段时间后会因OOM错误而崩溃。
谁可以帮助我?
答案 0 :(得分:1)
我的控制台中有很多这样的错误:
I / zygote64:释放了后台并发复制GC 661970(20MB) AllocSpace对象,0(0B)个LOS对象,57%空闲,8MB / 20MB,已暂停 855us共101.178ms
这不是错误,这只是为您提供了为应用程序分配/释放新内存的信息。当分配大量内存或由于没有更多引用而释放内存时,会发生这种情况。
此消息经常出现时,表明您的应用程序中的内存处理不正确。
一段时间后会因OOM错误而崩溃。
这意味着您的应用程序内存不足。当您尝试分配设备上不可用(或JVM不提供)的内存时,会发生这种情况。
您现在应该做的是找出分配大量内存的位置以及是否存在其他减少内存使用量的选项。一些简单的方法可能是:
android:largeHeap="true"
来增加堆大小。但这仅应视为最后一步。请记住,不同的设备和android版本为您的应用程序提供不同的内存量。