Я пишу приложение с графикой данных в реальном времени от датчиков на моем телефоне Android.
Для построения графиков в реальном времени я использую библиотеку GraphView и метод appendData
.
Я получаю данные по точкам от датчиков в моем BroadcastReceiver и после этого метода вызова appendData
.
private BroadcastReceiver sensorsDataReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() == BROADCAST_ACTION) {
if (intent.getIntExtra(MyService.SENSOR_TYPE, 9999) == Sensor.TYPE_ACCELEROMETER) {
float[] data = intent.getFloatArrayExtra(MyService.SENSOR_DATA);
mAccelerometerSeries.appendData(new DataPoint(mGraphXAxisSamples[0]++, data[0]), false, 600);
} else if (intent.getIntExtra(MyService.SENSOR_TYPE, 9999) == Sensor.TYPE_GYROSCOPE) {
float[] data = intent.getFloatArrayExtra(MyService.SENSOR_DATA);
mGyroscopeSeries.appendData(new DataPoint(mGraphXAxisSamples[1]++, data[0]), false, 600);
}
}
}
};
Основная проблема - сюжет обновляется рывками (с паузами). График обновляется в режиме реального времени до 8-й точки, после чего возникает задержка, после которой одновременно рисуются еще восемь точек (до 16). То же самое после 20-го и т. Д.
Дополнительно:
Также я попытался (HB совет) обернуть appendData
в Handler
с задержкой:
Handler h = new Handler(Looper.getMainLooper());
h.postDelayed(new Runnable() {
@Override
public void run() {
mAccelerometerSeries.appendData(new DataPoint(mGraphXAxisSamples[0]++, data[0]), false, 600);
}
}, 100);
Но это не меняет ситуацию: (