我有一个侦听蓝牙串行数据的线程。
我有一个将数据传递给 ui 线程的方法,称为:sendData(byte[] buffer)
,它将数据完美地发送到 UI 线程,这可能会导致它在高频接收数据包时变得非常慢。
但是我想实现一个定期处理程序,每 x 毫秒调用一次此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的运行并没有被调用。我尝试调试,后期延迟行被调用,但它以'No such instance field mHandler'
退出。
有什么想法吗?
我建议使用ScheduledExecutorService。请参阅文档。
它具有 scheduleAtFixedRate 方法,可用于计划定期操作。在你传递它的可运行变量中,使用你的sendData(tmp)命令调用 mHandler.post()。