Android GraphView проект заморозить с обновлениями в реальном времени
Я пытаюсь включить Android GraphView
проект в мое приложение, и все время у меня есть странные проблемы с ним.
Мое приложение требует рисования графика из данных в реальном времени. У меня есть поток со всеми сообщениями, которые предоставляют данные. В основной теме я читаю эти данные и просто использую mSeries1.appendData(new DataPoint(counter,data[0]),true,100);
где counter это int, которое увеличивается после каждого обновления.
К сожалению, в какой-то момент это замерзает. Я пытался положить его в synchronized
заблокировать или изменить строку кода на mSeries1.appendData(new DataPoint(counter,counter),true,100);
и все же этот самый результат.
Вот как выглядит память во время работы приложения и когда оно зависает:
Кто-нибудь знает, что здесь может быть не так?
РЕДАКТИРОВАТЬ:
Это мой текущий метод обновления моего графика:
public void onEventMainThread(ReadingsUpdateData data) {
mSeries1.appendData(new DataPoint(counter,data.getData()[0]),true,100);
counter++;
}
2 ответа
Может быть, уже слишком поздно, но у меня была похожая проблема, и в конце концов я обнаружил, что при добавлении GraphView новые данные "NaN" замирают.
Поэтому проверьте ситуацию, в которой результатом будет NaN, например, деление на ноль или что-то в этом роде.
Хотя вы не указываете скорость, с которой вы добавляете баллы, и как долго приложение работает без сбоев, вы должны ожидать, что в какой-то момент все пойдет не так (вы потенциально генерируете бесконечное количество точечных объектов, в то время как память действительно ограничен).
Нужно ли иметь все точки, которые приложение получило с самого начала? Если нет, вы можете реализовать своего рода кольцевой буфер, в котором хранятся только последние значения X, сгенерированные вашим "потоком провайдера", и обновлять график каждый раз, когда вы получаете новое значение с помощью метода.
your_series.resetData( dataPoint[] my_circular_buffer_of_data_points );
Эта тема очень похожа на вашу проблему, посмотрите на нее!