2012-05-14 4 views
0

私はこのコードを持っています例えばstopThread()関数を使ってスレッドから前後に移動するwhile変数の値を変更して、スレッドの実行を停止します。コードを実行してボタンを押すと、スレッドが開始されません。なぜどんなアイデア?アンドロイドのスレッドが

答えて

0

background.start()が呼び出されると、isRunningはまだfalseであるため、スレッドは開始されますが(whileループには入りませんでした)、すぐに停止します。

startThreadが呼び出されたとき、あなたはstartThread()メソッドに次のコードを置くことができますwhileループを入力するようにスレッドを確保するために:ちょうどその行を削除し、

public void startThread(){ 
    isRunning = true; 
    start(); 
} 

そして、あなたがonCreate()background.start()を呼び出すことはありません。

EDIT

あなたはそれを「開始」と好きなようにそれのように何回も「止める」ことができるように、生きている単一のスレッドを維持したい場合は、次のコードを使用することができます。

public void run() { 
    while (isRunning) { 
     if(!isWorking) { 
      try { Thread.sleep(10); } catch (InterruptedException ex) { } 
      continue; 
     } 
     //.. do your work here. 
    } 
} 

スレッドの実行状態をisRunningで、作業状態をisWorkingで制御します。

+0

startThreadに開始を入れたくない理由は、そのスレッドを複数回呼び出す必要があり、開始が既に開始されているためです。関数startThreadは単に変数を変更してスレッドが再び開始するようにするか、それが達成したいものです。それを行うためのより良い方法はありますか?非常に多くのアクションの再起動のタイプのように.... –

+0

@ジョンスミス、私の編集された答えを参照してください。 – neevek

+0

私の主な関心事は、なぜ私のコードはそれが意味することをやっていないのですか?あなたがこのコードを実行するときのように、それはやるべきことをしません、なぜですか?ボタンを使ってUIを構築しようとしていないのですが、そのボタンをクリックすると、変数をtrueに変更してスレッドを実行させるはずです...しかし、スレッドは実行されません。なぜですか? –

関連する問題