2011-12-19 12 views
1

私のプログラムは、加速度計のデータが私が決めたしきい値を超えると、Webサーバーにデータを送信しています。だから、私は操作を送信するためのスレッド機構を使用:Android、スレッドの使用

if(threshold is exceeded) 
    thread_send .start(); 

しかし、この使用原因「スレッドすでに使用」のエラー。だから、私は悪いと思う方法を以下のように使用しています。

新しいスレッドが毎回作成されます。その使用は否定的な結果をもたらすか? (例えば、メモリの問題やパフォーマンスの問題など)

あなたの提案はありますか?

Editted:

私のプログラムは、非常に多くの場合、Webサーバーにデータを送信する必要があります。 correctly.So遅い作業を働いている最も重要なことは、限り、プログラムが突然停止することはできませんとして、許容..です

私はあなたの提案に沿ったExecutorServiceの使用:

ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); 

........  

if(threshold is exceeded) { 
    threadExecutor.execute(this); 
} 

しかし、エラーが発生しました: ReceivedExecutionException .. enter image description here

どうすればよいですか?

+0

データを送信する頻度や送信の速さなどの要因によって異なります。たとえば、しばらく待つことができれば、データがメモリに保存され、アプリが終了したら一度にすべて送信することができます。データをほぼ連続して送信すると、複数の作業を行う単一のスレッド、または 'Executors.newXXX'によって作成されたものなどのスレッドプールがより良いかもしれません。 –

答えて

0

2番目のコードは正しく表示されますが、並列に実行されているスレッドが多すぎると速度が低下する可能性があります。アプリケーションによっては、Executors.newSingleThreadExecutorを使用して、キュー内でスレッドを1つずつ実行させることが適切な場合があります。

+0

私はあなたの答えに沿って私の質問を編集しました。 – iremce

0

1つのアイデアは、スレッドを実行するシングルトンのようなサービスを作成することです.1つのアイデンティティーは実行されていなければ起動し、そうでなければ起動します。

同時に複数回実行する場合は、正しいものを使用してください。スレッドは新しいスレッドごとに1回しか実行できないことを覚えておいてください。

関連する問題