Приложение получает данные с Bluetooth и рисует график в реальном времени.
Однако граф часто получает разрывы.
Источник данных - модуль Bluetooth (отдельный поток), и он не может отправить все данные в библиотеку SciChart. Честно говоря, когда я вставляю Log.d()
в поток bluetooth для печати данных, все начинает работать волшебным образом.
Я подозреваю, что поток Bluetooth не выполняется вовремя.
Вот некоторый код, который является частью Scichart, модифицированного мной в файле DataManager.java
.
public void setSensingData(PBSensorData pbSensorData) {
try {
sensorDataQueueBlocking.put(pbSensorData);
} catch (InterruptedException e) {
e.printStackTrace();
}
// This is the magic line. When the line is here, things work fine
Log.d("DataManager", "put: " + (System.currentTimeMillis() - startTime) + " (ms)" );
startTime = System.currentTimeMillis();
}
Заранее спасибо!
К сожалению, вы не предоставили код, который настраивает SciChartSurface или его части (например, код, заполняющий ряды данных), поэтому я не уверен на 100%, почему вы получаете разрывы в своем приложении.
Это может быть вызвано слишком частыми обновлениями диаграммы или, возможно, вы выделяете слишком много объектов во время обновлений. В этом случае вы можете получить микро-зависания в вашем приложении, когда ОС Android приостанавливает работу виртуальной машины, чтобы выполнить GC, что потенциально может привести к разрывам, которые вы описали. В любом случае я бы посоветовал начать с профилирования вашего приложения, чтобы выяснить, есть ли скачки в использовании процессора или памяти. Также я бы посоветовал взглянуть на этот ответ, в котором содержатся некоторые предложения по улучшению производительности диаграммы.
Также я бы посоветовал вам взглянуть на демонстрацию Audio Analyzer из приложения SciChart Showcase, которая показывает, как отображать данные в реальном времени с микрофона. Надеюсь, что этот пример поможет вам.