android bluetooth如何断开而不挂起

时间:2015-02-08 10:04:38

标签: android bluetooth

我正在编程蓝牙设备。我发现当我尝试断开连接时,应用程序会挂起某些设备。

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"事件甚至会导致应用程序挂起。

但是,我不知道上面的代码有什么问题。我不确定是否会导致任何同步问题?如何改善流程以消除潜在的挂起问题。我们非常感谢任何建议。感谢。

1 个答案:

答案 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);
    }
}

当套接字闭合时,循环将自然断开,因为读取将失败