2010-12-03 16 views
13

Threadオブジェクトが既に起動されているかどうかを確認する方法はありますか?Androidスレッドが実行されているかどうかを確認する方法

私のようなので、何かをしようとしている:

が実行されていない場合には、スレッドを開始する
if(rt.isAlive() == true) 
{ 
    Log.v(TAG, "START RECORD"); 
    rt.recording = true; 
} 
else 
{ 
    Log.v(TAG, "START THREAD/RECORD"); 

    rt.start(); 
} 

答えて

14

rtThreadとすると、rt.isAlive()にチェックしてください。

また、スレッドを開始する直前に真偽フラグを使用してtrueに設定してください。

私は実際にブーリアン・アプローチを好みます。メインスレッドがもう一方のスレッドを2回起動することはできません。スレッドが起動して実行されるまで少し遅延があります。メインスレッドがスレッドを2回連続して実行すると、rt.isAlive()に「false」というネガティブが表示されることがあります。

+0

isAliveは何とか私のために偽を返し続けます(私は自分のコードを反映するために私の答えを更新しました)。ブール値を使うことは私の内部スレッドループを止めるために既に使用しています。助けてくれてありがとう! – wajiw

+0

うんうん。基本的には、アクションがヒットするまでスレッドを初期化しないで、その後私は内部スレッドboolをチェックします。 – wajiw

+0

うれしいことを聞いてうれしい!私が繰り返し言いたいのは、スレッドを起動してから実行するまでの遅延を認識する必要があることです。スレッドの 'run'メソッドでboolを設定すると、スレッドを開始した時間が短くなりますしかし、ブールはまだ真実に設定されていません。だから私はメインスレッドで設定することをお勧めします。 – EboMike

1

起動して実行している場合は、IllegalThreadStateExceptionが表示されます。それをキャッチすることは知る一つの方法です。

また、スレッドを拡張し、スレッドが開始されたかどうかを追跡するブール値を追加することもできます。 super.start()を呼び出す前に、スレッドのstartメソッドをオーバーライドしてブール値をチェックすることができます。

Androidでスレッドを使用する場合は、非常に注意が必要です。それを開始しているコンポーネントのライフサイクルを理解していることを確認してください。また、直接スレッドを生成するのではなく、HandlerやAsyncTaskのようなヘルパークラスを考慮する必要があります。

+0

。 – EboMike

+0

これを達成する方法はたくさんあります。私たちは、それをする必要があるかどうかは、スニフテストに合格しないことに同意すると思います。 – elevine

+0

私はちょうどこれが主なものであるスレッドを使う方法を学ぼうとしています。別のクラスで独自のThreadの実装を使用していますので、Runnableを使用すると機能しませんが、ブールメソッド自体は必要です。助けてくれてありがとう! – wajiw

5

私は成功を収めて、このアプローチを使用しました:私の答えを参照してください、私はメインスレッド上でブールを行うだろう

if (mythread.getState() == Thead.State.NEW) 
    //then we have a brand new thread not started yet, lets start it 
    mythread.start(); 
else 
    //it is running already compensate 
関連する問題