Это код данных моего графика обновления:
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: Background concurrent copying GC freed 661970(20MB) AllocSpace objects, 0(0B) LOS objects, 57% free, 8MB/20MB, paused 855us total 101.178ms
Через некоторое время произойдет сбой с ошибкой OOM.
Кто может мне помочь?
@Selvin Я установил обновление каждые 60 секунд, а длина списка составляет 18
There are so many error in my console like this:
I/zygote64: Background concurrent copying GC freed 661970(20MB) AllocSpace objects, 0(0B) LOS objects, 57% free, 8MB/20MB, paused 855us total 101.178ms
Это не ошибка, это просто дает вам информацию о выделении/освобождении новой памяти для вашего приложения. Это происходит при выделении большого объема памяти или когда память освобождается из-за того, что на нее больше нет ссылок.
Если это сообщение появляется часто, это может указывать на неправильную обработку памяти в вашем приложении.
It will crash after a period of time with the OOM error.
Это означает, что вашему приложению не хватило памяти. Это происходит, когда вы пытаетесь выделить память, которая недоступна на вашем устройстве (или не предоставлена JVM).
Что вам нужно сделать сейчас, так это выяснить, где выделяется этот большой объем памяти и есть ли другие варианты сокращения использования памяти. Вот некоторые простые подходы:
android:largeHeap = "true" в своем AndroidManifest. Но это следует рассматривать только как последний шаг. Имейте в виду, что разные устройства и версии Android предоставляют вашему приложению разный объем памяти.Спасибо за ваш ответ. Я знаю, что это проблема утечки памяти. Я просто хочу убедиться, это сторонняя библиотека этого графика или моя работа
Проблема скорее не в этом коде, а в размере списков и частоте обновления.