2011-09-14 12 views
0

My appは、Bluetoothテキスト入力の安定したストリームからのデータを表示します。Bluetoothで中断しているスレッドを停止する方法

Android 2.3.4では、ソケットを閉じると直ちにIO例外がスローされます。 2.2ではほとんどの時間しかありません。

onStop()が呼び出されたときに読み込みを停止しようとしています。その後、onStart()で私は再接続します。

すべてのバージョンで動作する可能性の高いinputStreamの読み込みで中断されているスレッドを削除するには、より良い方法がありますか?

おかげ TomZ

+0

IOソケット読み取りでスレッドがブロックされています。別のスレッドからソケットを閉じます。申し訳ありませんが、私は尋ねる必要があります - あなたはどんな結果を期待していましたか?例外を投げることは、ソケット接続を裂くことに対する合理的な対応です。あなたは例外をキャッチして、それを処理することができます。 –

+0

それはまさに私が望んで期待していたものですが、例外です。問題は、2.2が常にそれを投げるわけではないということです。ちょうどハングするので、より良い方法を探しています。私が言うことから、Bluetoothソケットの読み取りにタイムアウトを持たせる方法はありません。トムズ – TomZ

答えて

0

私は仕事を中断しようと、それは、割り込み時にやって、私はそれができたと述べた例外をキャッチされたコンパイルエラーを取得したものに応じて例外、複数の種類の中で泥沼ました投げられない。いくつかの作業コードを取得したとしても、Froyo(Galaxy S - Vibrant)には依然として信頼性の問題がありました。

私はバックアップをして、短いスリープのループでInputStream.availableを使用して、読み取りタスクを終了するように設定されたフラグをチェックしました。そのため、スリープ以外は一時停止しませんでした。これは様々なアンドロイド版でうまくいった。

これは、外部からスレッドを停止させるのではなく、終了してそれを自分のものに戻す必要性を検出させることです。

読み込みポーリングのような、ちょっとしたくぼみのようです。しかし、コードは安定しており、電話のパフォーマンスは低下していないようです。