在线程

时间:2016-07-13 08:31:36

标签: java android multithreading bluetooth android-handler

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

我有一个方法将数据传递给名为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'退出。

任何想法该怎么做?

1 个答案:

答案 0 :(得分:1)

我建议使用ScheduledExecutorService。请参阅docs

它具有scheduleAtFixedRate方法,您可以使用该方法来安排定期操作。在传递它的runnable中,使用sendData(tmp)命令调用mHandler.post()。