我有一个侦听蓝牙串行数据的线程。
我有一个方法将数据传递给名为sendData(byte[] buffer)
的ui线程,该线程将数据完美地发送到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);
Interval是一个预先声明的,它将是该方法被调用的周期性间隔。
但postDelayed的运行没有被调用。我尝试调试,调用postdelayeds行,但它以'No such instance field mHandler'
退出。
任何想法该怎么做?
答案 0 :(得分:1)
我建议使用ScheduledExecutorService。请参阅docs。
它具有scheduleAtFixedRate方法,您可以使用该方法来安排定期操作。在传递它的runnable中,使用sendData(tmp)命令调用mHandler.post()。