スレッドまたはAsynctask for Bluetooth?

私は2つ以上のデバイス間を接続するBluetoothを使用するプログラムを書いています。私は例としてBluetoothChatを使用しました。

問題は、 "接続された"スレッドの "read"コマンドに達すると、プログラム全体がフリーズしているようです。

myThread.run()の後のコマンドには到達していないが、スレッド内のコマンドがあるため、それは起こっていると思います。

私は何か間違っているのですか?

私はスレッドの代わりにAsyncTaskに切り替える必要がありますか?

私は主題についての他のポストのいくつかを読んでみたが、それに従うのが難しいと感じた。 具体的には、AsyncTaskを使用する必要がある場合、サンプルプログラムはスレッドをなぜ使用しますか?

これは接続されたスレッドのコードです:

    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");
    }

"before read"ログノートが表示されますが、他には何もありません。 メインスレッドには決して戻りません。

1

2 答え

myThread.run()は同じスレッド上で実行されますが、myThread.start()が必要な場合はそれを修正して、いくつかのコードを表示します

2
追加された
Grrrrr。どうもありがとう。今は素晴らしい作品です。
追加された 著者 theblitz,
ありがとうございました...私の人生を保存しました...
追加された 著者 ValayPatel,

スレッドを開始するには、 myThread.run()ではなく myThread.start()を使用する必要があります。

1
追加された
Grrrrr。どうもありがとう。今は素晴らしい作品です。
追加された 著者 theblitz,