gpt4 book ai didi

java - Android 蓝牙 IOException 错误的文件号

转载 作者:行者123 更新时间:2023-11-30 09:41:45 25 4
gpt4 key购买 nike

我有一个接收线程正在监听 BluetoothServerSocket accept() 调用。这个线程会很频繁地被另一个线程杀死并重新启动。当它收到 kill 信号时,它会关闭 BluetoothServerSocket,从而在 accept() 中引发 IOException,并退出无限循环。但偶尔,在这些启动和重新启动期间,listenUsingRfcommWithServiceRecord() 调用会捕获“错误文件编号”IOException 并过早退出循环。我想我可能没有在 kill(?) 中正确关闭 BT 组件,但还没有弄清楚任何事情......有人可以给我一些指示吗?

private class ReceiveThread extends Thread {
private final static String TAG = "ReceiveThread";
private BluetoothServerSocket mmBtServer;
private BluetoothSocket mmBtSocket;

public ReceiveThread() {
setName(TAG);
}

public void run() {
if(D) Log.d(TAG,"RceiveThread running");

while(true) {
try {
SetState(SERVICE_STATE.LISTENING);
mmBtServer = mBtAdapter.listenUsingRfcommWithServiceRecord(mAppName, mUUID);

if(D) Log.d(TAG,"ReceiveThd accepting connection");
mmBtSocket = mmBtServer.accept();
// Close server once socket establishes
mmBtServer.close();

if(D) Log.d(TAG, "Connection Established");
SetState(SERVICE_STATE.CONNECTED_BUSY);



/** Handle Processing **/



// Close socket
mmBtSocket.close();
} catch (IOException e) {
SetState(SERVICE_STATE.NOT_CONNECTED);
Log.d(TAG,"IOException in ReceiveThread", e);
break;
}

SetState(SERVICE_STATE.CONNECTED_IDLE);
}
}

public void kill() {
try {
if(mmBtSocket!=null) mmBtSocket.close();
if(mmBtServer!=null) mmBtServer.close();
} catch (IOException e) {
Log.d(TAG,"Failure killing ReceiveThread", e);
}
SetState(SERVICE_STATE.NOT_CONNECTED);
}
}

最佳答案

如果有人感兴趣……我发现这只发生在某些手机上。在大约 20-30 次停止和启动循环后,我可以在我的三星 Galaxy S 上始终如一地重现这一点。很多时候,我也会从 bluez 中捕获到“内存不足”,这导致我发现问题存在于 api 之下......我无法在 Droid X、HTC G2 或 myTouch 4G 上重现此问题。

关于java - Android 蓝牙 IOException 错误的文件号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8872212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com