我修改了标准的蓝牙聊天示例,每半秒一次向蓝牙设备发送 4 个字节的数据。如果我重新启动应用程序,它工作正常。但是,如果我按以下方式重新连接,则会出现问题:
连接蓝牙后,我再次单击菜单上的连接按钮并选择同一设备。这会断开蓝牙连接(不确定这是否是正确的断开连接程序)。然后,我通过选择设备再次连接,它将重新连接。重连后,出现了一个很奇怪的问题:不是每半秒发送一次数据,而是每四分之一秒发送一次数据。如果我再次执行该过程并重新连接,时间间隔将变得更短。它达到了接收端的蓝牙设备无法跟上数据的程度。此时,唯一的出路就是杀死应用程序并重新启动。然后一切变得正常,直到下次我再次尝试重新连接。
我尝试了不同的东西,但似乎没有任何东西可以解决这个问题。例如,我确保发送数据的线程在断开连接时被终止,因此没有多个线程正在发送数据。我想知道重新连接时波特率是否会改变,但是为什么波特率会影响 Thread.sleep(500); 语句(负责控制半秒数据发送)。任何帮助将不胜感激。
下面是代码,SendClass是在MainActivity下创建的:
class SendClass implements Runnable {
public void run() {
bytearr[0]=0;bytearr[1]=0;bytearr[2]=0;bytearr[3]=0;
while (!Thread.currentThread().isInterrupted()) {
if (mChatService==null || mChatService.getState()
!=BluetoothChatService.STATE_CONNECTED) {
continue;
} else {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mChatService.write(bytearr);
}
}//end of run
}//end of runnable
然后在 STATE_CONNECTED 下:
case BluetoothChatService.STATE_CONNECTED:
setStatus(getString(R.string.title_connected_to,mConnectedDeviceName));
/*
if(sendingThread!=null){
//sendingThread.stop();
sendingThread.interrupt();
if(D) Log.i(TAG, "after sendingThread");
sendingThread = null;
}*/
sendingThread = new Thread(new SendClass());
sendingThread.start();
break;
如您所见,我试图在创建新线程之前杀死线程,但这没有任何区别。有什么建议么?