我正在编写一个使用蓝牙连接2个或更多设备的程序。我以BluetoothChat为例。
问题是当它到达“连接”线程中的“读取”命令时,似乎冻结了整个程序。
我认为这就是发生的事情,因为未达到myThread.run()之后的命令,但是线程内的命令是。
我做错了吗?
我应该切换到AsyncTask代替Thread吗?
我尝试阅读有关该主题的其他一些帖子,但发现很难遵循。 具体来说,如果我应该使用AsyncTask那么为什么示例程序使用Threads?
这是连接线程中的代码:
public void run() {
byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
Log.d(TAG,"Server - BTConnectedThreadServer - run() - before read");
bytes = mmInStream.read(buffer);
Log.d(TAG,"Server - BTConnectedThreadServer - run() - after read");
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothConstants.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
Log.d(TAG,"Server - BTConnectedThreadServer - run() - after send");
} catch (IOException e) {
Log.d(TAG,"Server - BTConnectedThreadServer - run() - disconnected", e);
e.printStackTrace();
BluetoothConstants.connectionLost(mHandler);
break;
}
}
Log.d(TAG,"Server - BTConnectedThreadServer - run() - Exited Loop");
}
“之前阅读”日志记录出现但没有别的。 它永远不会返回主线程。
答案 0 :(得分:2)
myThread.run()仍然会在同一个线程上运行,你需要myThread.start(),如果没有解决它,请显示一些代码
答案 1 :(得分:1)
您应该使用myThread.start()
而不是myThread.run()
来启动该主题。