在线程中定期调用 Handler.Postdelay



我有一个侦听蓝牙串行数据的线程。

我有一个将数据传递给 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()。

最新更新