Вызов 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).