蓝牙的线程或异步?

时间:2011-11-24 18:13:56

标签: android multithreading bluetooth android-asynctask

我正在编写一个使用蓝牙连接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");
    }

“之前阅读”日志记录出现但没有别的。 它永远不会返回主线程。

2 个答案:

答案 0 :(得分:2)

myThread.run()仍然会在同一个线程上运行,你需要myThread.start(),如果没有解决它,请显示一些代码

答案 1 :(得分:1)

您应该使用myThread.start()而不是myThread.run()来启动该主题。