2011-12-28 55 views
1

我最終設法讓我的其他帖子排序;創建一種每秒鐘更新GUI的方式。所以我的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 2011-12-28 23:34:28

+0

*對不起,我的意思是根本沒有開始。 GUI不更新,但run()和while()方法都輸入 – Katana24 2011-12-28 23:37:32

+0

@ Katana24編輯我的答案,希望它有幫助。 – Argyle 2011-12-29 19:47:29