Вызов Handler.Postdelayed периодически в потоке

У меня есть поток, который слушает Bluetooth последовательных данных.

У меня есть метод, который передает данные в поток пользовательского интерфейса, который называется: sendData(byte[] buffer), который отлично отправляет данные в поток пользовательского интерфейса, что может привести к тому, что он станет очень медленным при получении пакетов с высокой частотой.

Но я хочу реализовать периодический обработчик, который вызывает это sendData метод каждые х миллисекунд, потому что я получаю пакеты данных с высокой частотой.

В моей теме я назвал следующее в run() метод:

Looper.prepare;
mHandler = new Handler();

тогда я испортился sendData(buffer) (что само по себе делает отличную работу) с:

mHandler.postDelayed(new Runnable() {
                       @Override
                        public void run() {
                            sendData(tmp);
                            System.out.println("PostDelayed| "+ System.currentTimeMillis());

                             mHandler.postDelayed(this,INTERVAL);

                        }
                    },INTERVAL);

Интервал - это предварительно объявленный интервал, в котором будет вызываться метод.

Но запуск postDelayed не вызывается. Я пробовал отладку, вызывается строка postdelayeds, но она завершается с 'No such instance field mHandler',

Есть идеи что делать?

1 ответ

Я предлагаю использовать ScheduledExecutorService. Смотрите документы.

Он имеет метод scheduleAtFixedRate, который можно использовать для планирования периодического действия. А в исполняемом файле, который вы передаете, вызовите mHandler.post() с помощью команды sendData(tmp).

Другие вопросы по тегам