2011-12-28 19 views
1

私は最終的に私の他のポストをソートすることができました。毎秒GUIを更新する方法を作成します。だから、私のrunnableはうまく動いていますが、runnableを止めるためのGUIにボタンを追加しました。しかし、どうしていますか?Runnableをキャンセルする

私はこのコードを試してみた:

// Button to stop the runnable 
    stop = (Button) findViewById(R.id.stop); 
    stop.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      handler.removeCallbacksAndMessages(timerTask.class); 

     } 
    }); 

私はので、私は手動で新しいスレッドを作成しない、それを使用するためにはRunnableを実装し、それにrun()メソッドを追加します。それではどうしますか?

ありがとうございました

答えて

2

スレッドを殺すことはできません。何をする必要があるのは、停止要求を確認するメソッドをRunnableオブジェクト実装に追加することです。その後、そのメソッドは、Runnable.run()メソッドを終了させる条件を反転します。

public class YourClass implements Runnable { 

    private boolean keepGoing = true; 

    public void run() { 
     while(keepGoing) { 
      // Do important work! 
     } 
    } 

    public void stop() { 
     this.keepGoing = false; 
    } 
} 

だからあなたのストップボタンのためのあなたのonClick(View v)実装では、あなたはyourClassInstance.stop()を呼ぶだろう。これにより、ループが破られ、run()メソッドが終了し、スレッドがクリーンアップされます。

+0

少し詳しく説明できますか?私はあなたが上で言ったことを試して、コードはちょうどすべてで始まります - GUIは変化しません – Katana24

+0

*申し訳ありませんが、私は全く始まっていないことを意味しました。 GUIは更新されませんが、run()メソッドとwhile()メソッドの両方が入力されます – Katana24

+0

@ Katana24私の答えを編集しました。 – Argyle

関連する問題