Рывки при рисовании графика в реальном времени с Android GraphView - PullRequest
0 голосов
/ 04 июля 2018

Я пишу приложение с графикой данных в реальном времени от датчиков на моем телефоне 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);

Но это не меняет ситуацию: (

...