1

私は、Android携帯がソケット接続を介してPCと通信するための簡単なアプリケーションを書いています。

電話はいつでもメッセージを書き込んだり受信したりする可能性があり、コンピュータも同様にメッセージを受信する可能性があります。私がこれまで使用したソリューションは次のように機能します。

Create a thread and call READ in it.
Run an infinte loop.
    Check if thread has finished,
        If so grab the READ and process,
        Then start a new thread also calling read.
    Check to see if another object working in another thread wants to write,
        If so grab and write.

具体的には、AndroidAPIのAsyncTaskを使用してスレッドを実行しています。

すべて正常に動作しますが、READごとに新しいスレッドを作成すると、パフォーマンスが高すぎたり、コーディングが不適切になったりするのではないかと思います。そうであれば、同じスレッドを再利用して同じ動作をさせるにはどうすればよいでしょうか。

あるいは、この状況を全体的に処理するためのより良い方法はありますか?

アドバイスをよろしくお願いします!

4

2 に答える 2

2

はい、読み取りごとに新しいスレッドを作成することは、説明されているニーズに対して非常に非効率的です。

代わりに、単一のスレッド、List<your data type>読み取りを保持するための、およびデータが使用可能であることを示すフラグを立てるためのセマフォを作成することを検討してください。スレッドは各メッセージを読み取り、それをリストに配置し、データを待機しているものにセマフォを投稿します。その「何でも」は、リストにあるものを空にするまで受け取り、セマフォの待機に戻ります。

于 2012-06-19T20:30:55.170 に答える
0

1つの読み取りスレッドと1つの書き込みスレッドが必要です。どちらもBlockingQueueを使用して、アプリケーションの残りの部分とインターフェイスする必要があります。なぜあなたが書きたい複数のスレッドを持っているのか分かりませんが。

于 2012-06-19T22:52:56.273 に答える