2012-05-02 16 views
0

画面の色を変更するためのコードがあります。Androidのスレッドを停止する

しかし、私はこのスレッドを停止する方法がわからない:

lin = (LinearLayout)findViewById(R.id.mainlayout); 
     new Thread(new Runnable() { 
      public void run() { 
       while (finalStatus < 1) { 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
        colorHandler.post(new Runnable() { 
         public void run() { 
          if(flag) 
          { 
          lin.setBackgroundColor(Color.BLUE); 
          flag = false; 
          } 
          else 
          { 
           lin.setBackgroundColor(Color.RED); 
           flag = true; 
          } 
         } 
        }); 
       } 
      } 
     }).start(); 

私は入れてみました:

Button btn = (Button) findViewById(R.id.button1); 
     btn.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       Toast.makeText(getBaseContext(),"STOP",Toast.LENGTH_SHORT).show(); 
       finalStatus=1; 
       lin.setBackgroundColor(Color.BLACK); 
      } 
     }); 

とスレッドは停止しますが、画面が赤、または青で、I黒が必要です。

さらに、このスレッドを停止した後にこのスレッドを開始するにはどうすればよいですか?

+1

サービスはありません。スレッドはいくつかあります。中断したい場合は、finalStatusを1に変更してください。私が紛失しているものがありますか?バックグラウンドを更新するコードにはループがないため、すぐに終了します。 – azertiti

+0

ありがとう、私の編集を参照してください – Gold

+0

私の答えを参照してください。 – azertiti

答えて

0

背景が青色または赤色になるのはどうかわかりませんが、finalStatusを1に設定したと仮定しましょう。背景を変更せずにスレッドを終了するには、別のあなたのボタンクリックリスナーの値は、colorHandler.postが問題を解決する前の、以下の条件を追加する111に言わせて:

if (finalStatus == 111) { 
    return; 
} 
0

だけ外側スレッドrun()メソッドでWhileループの後にそのlin.setBackgroundColor(Color.BLACK);コードを置きます。 UIのスレッド以外はUIを更新しないので、同じようにハンドラを使用することを忘れないでください。

+0

これは予期しない影響を与えます。最初に実行されるスレッドは、バックグラウンドを黒または異なる色に設定するものです。実行順序によっては、そのうちの1つが常に上書きされます。 – azertiti

関連する問題