我的Android应用程序非常简单。它所做的就是无限地执行以下循环(伪代码)
int longEnough = 12sec;
if (btAdapter.isDiscovering()){
btAdapter.cancelDiscovery();
}else{
btAdapter.startDiscovery();
wait(longEnough);
}
问题是它非常不稳定。迟早,但它总是被冻结。调试器显示在Android内部某处,initSocketNative
的调用未成功。以下是logcat
11-07 17:00:57.969: WARN/System.err(1473): java.io.IOException: Unknown error: 0
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothSocket.initSocketNative(Native Method)
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothSocket.<init>(BluetoothSocket.java:153)
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothServerSocket.<init>(BluetoothServerSocket.java:77)
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothAdapter.createNewRfcommSocketAndRecord(BluetoothAdapter.java:983)
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothAdapter.listenUsingRfcommWithServiceRecord(BluetoothAdapter.java:935)
11-07 17:00:57.969: WARN/System.err(1473): at com.mobileleader.sync.obex.connection.BluetoothConnection$AcceptThread.run(BluetoothConnection.java:136)
发生崩溃后,adapter.isDiscovering()
所有后续调用true
和Android都会忽略cancelDiscovery()
的所有来电。有一次,我一直在等待10分钟(只是为了实验),直到它复活。当然没有运气。
测试环境包括一些2.3.x Android设备。
问题是:我面对的是什么?