Выйти из памяти - PullRequest
       8

Выйти из памяти

0 голосов
/ 13 марта 2019

Это код данных моей диаграммы обновления:

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 (20 МБ) объектов AllocSpace, 0 (0B) LOS-объектов, 57% свободных, 8 МБ / 20 МБ, приостановлено 855, всего 101,178 мс

Через некоторое время произойдет сбой с ошибкой OOM.
Кто может мне помочь?

1 Ответ

1 голос
/ 14 марта 2019

В моей консоли столько ошибок, как это:

I / zygote64: фоновое параллельное копирование GC освободил 661970 (20MB) объектов AllocSpace, 0 (0B) объектов LOS, 57% свободных,8 МБ / 20 МБ, приостановлено 855 всего 101,178 мс

Это не ошибка, это просто дает вам информацию о выделении / освобождении новой памяти для вашего приложения.Это происходит при выделении большого объема памяти или когда память освобождается, потому что на нее больше нет ссылок.

Когда это сообщение появляется часто, это может указывать на плохую обработку памяти в вашем приложении.

Через некоторое время произойдет сбой с ошибкой OOM.

Это означает, что ваше приложение вышло из памяти.Это происходит, когда вы пытаетесь выделить память, которая недоступна на вашем устройстве (или не предоставлена ​​JVM).

Что вы должны сделать сейчас, это выяснить, где выделен этот большой объем памяти и есть лидругие варианты, чтобы уменьшить использование памяти.Вот несколько простых подходов:

  • использовать глобальные (статические) переменные только в случае необходимости
  • свободных ресурсов, как только они вам больше не нужны (например, перезаписывать растровые изображения)
  • Проверьте свой код, если вы можете оптимизировать его, чтобы использовать меньше ресурсов.Иногда случается, что, например, одни и те же данные находятся в двух разных массивах.
  • , если все это не помогает, вы можете попытаться увеличить размер кучи, установив android:largeHeap="true" в AndroidManifest.Но это следует рассматривать только как последний шаг.Помните, что различные устройства и версии для Android предоставляют разное количество памяти вашему приложению.
...