Java BT芯片周期性心跳信息的处理
我对java非常陌生,我的任务是实现心跳机制来监控BT芯片的有效性 BT芯片每隔5秒通过uart接口发送一条空消息(只有消息ID,没有内容),java模块必须读取该消息。如果没有收到该消息,则假设芯片上的固件已失效,需要重置,java模块可以通过切换GPIO来完成重置 负责从uart读取的模块实现为扩展线程的类。我试过使用android.os.CountdownTimer,但不起作用。它抛出以下错误: AndroidRuntime:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序。 java中实现这种需求的最佳机制是什么Java BT芯片周期性心跳信息的处理,java,android,multithreading,Java,Android,Multithreading,我对java非常陌生,我的任务是实现心跳机制来监控BT芯片的有效性 BT芯片每隔5秒通过uart接口发送一条空消息(只有消息ID,没有内容),java模块必须读取该消息。如果没有收到该消息,则假设芯片上的固件已失效,需要重置,java模块可以通过切换GPIO来完成重置 负责从uart读取的模块实现为扩展线程的类。我试过使用android.os.CountdownTimer,但不起作用。它抛出以下错误: AndroidRuntime:java.lang.RuntimeException:无法在未调
/*Start timer for 5s for receiving heartbeat*/
mTimer=new CountDownTimer(5000,1000) {
@Override
public void onTick ( long l){
}
@Override
public void onFinish () {
Log.e(TAG, "Nothing received for 5s, missed heartbeat, reset BT chip");
try {
resetBTChip(false);
} catch (InterruptedException e) {
Log.e(TAG, "Can't reset the chip");
return;
}
}
};
mTimer.start();
/*Check the message and deal with timer*/
if(HEART_BEAT.getCode()==opcode) {
mTimer.cancel(); /*Restart the timer on heart-beat event*/
mTimer.start();
Log.e(TAG, "Got HEART BEAT");
continue;
} else {
Log.e(TAG, "Got Something else, handle the message");
mTimer.cancel(); /*Restart the timer on any event*/
mTimer.start();
}
您可以执行runnable和handler。处理程序有一个postdelay函数,允许您指定在运行runnable之前等待多长时间。它们还可以删除/取消计时器。我以前就是这样做心跳的。如果倒计时不起作用,你可以试试 因此runnable将负责重置函数。你应该用你现在的计时器。如果您再次获得心跳信号,您只需取消当前的runnable,并将其与postdelay函数一起添加回去以重新启动计时器