我正在编程蓝牙设备。我发现当我尝试断开连接时,应用程序会挂起某些设备。
public class ConnectionThread extends Thread {
....
@Override
public void run() {
bReading = true;
while (bReading) {
try {
if (mInStream==null) break;
bytes = mInStream.read(buffer);
} catch (IOException e) {
cancel();
break;
}
}
}
public void cancel() {
bReading = false;
if (mInStream != null) {
try {
mInStream.close();
} catch (Exception e) {
e.printStackTrace();
}
mInStream = null;
}
所以我调用cancel函数来停止while循环。 对于上面的逻辑,将会有"线程死亡"事件,这不好。对于某些设备," thead dead"事件甚至会导致应用程序挂起。
但是,我不知道上面的代码有什么问题。我不确定是否会导致任何同步问题?如何改善流程以消除潜在的挂起问题。我们非常感谢任何建议。感谢。
答案 0 :(得分:0)
要停止通讯,您可以关闭套接字:
“
while (true) {
try {
if (mInStream==null) break;
bytes = mInStream.read(buffer);
} catch (IOException e) {
break;
}
}
“
public void cancel(){
try{
mmSocket.close();
if(DEBUG_MODE){
Log.i(TAG, "socket closed");
}
}catch(IOException e){
Log.e(TAG, "socket close failed", e);
}
}
当套接字闭合时,循环将自然断开,因为读取将失败