2010-09-29 54 views
3

我在Java/Android的線程是這樣的:當我運行我的應用程序如何從一個按鈕重新啓動java/Android中的線程?

Handler handler = new Handler() { 

    @Override 
    public void handleMessage(Message msg) { 
     // TODO Auto-generated method stub 
     update_i(); 
    } 
}; 



@Override 
protected void onStart() { 
    // TODO Auto-generated method stub 
    super.onStart(); 

    Thread myThread = new Thread(new Runnable() { 
     public void run() { 
      while (true) { 
       try { 
        handler.sendMessage(handler.obtainMessage()); 
        Thread.sleep(timer); 
       } catch (Throwable t) { 
       } 
      } 
     } 
    }); 

    myThread.start(); 
} 

線程工作正常。但我想用按鈕啓動/重啓線程。

Button.OnClickListener StartButtonOnClickListener = new Button.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     //start/restart the thread 
    } 
}; 

如果我將線程複製到按鈕中,每次用戶單擊按鈕時都會創建一個新線程。我想在用戶第一次點擊該按鈕時運行線程,「殺死它」,如果用戶第二次點擊按鈕(我不想啓動第二個線程),從頭開始。

回答

6

您無法重新啓動線程。

從文檔:

Throws IllegalThreadStateException 
    if the Thread has been started before 

你可以殺死前一個線程,但最終你將不得不創建線程的第二個實例。


資源:

11

我認爲科林·賴特你不容只需重新啓動你需要一個新的實例,並中斷功能將停止運行的線程是否仍在運行。

我建議你製作一個內聯類,一個內聯實現的實例,它會使它更容易理解。

if(myThread.isAlive()){ 
    myThread.interrupt(); 
} 
myThread = new MyThread(); 
myThread.start(); 

希望這有助於

+0

這是很好呢!謝謝! 但是對於每一次中斷,它都會被視爲異常? @mklfarha? – gumuruh 2014-08-10 08:01:12