2011-12-29 91 views
0

我設法讓我的線程安全地運行和停止,但是我想知道什麼是啓動另一個線程的最佳選擇?我知道你不能重新啓動一個線程,所以我必須創建一個新線程。重新啓動線程

這裏是我的意思:自動調用

1)第一螺紋 - 行爲像一個簡單的計數器,使用穿線

2的「實現可運行」方法)有一個按鈕從而中斷此線程創建並存儲該線程在中斷之前交互的最後一個值。

3)下一個按鈕應該調用一個新的線程,並使用該值作爲它的起點。下面是我的代碼第一個嘗試:

@Override 
public void run() 
{ 
    Log.v( TAG,"Runnable"); 

    if(isRunning) 
    { 
     Log.v( TAG,"Runnable -> Inside While Loop"); 

     counter.setText(" "+i); 
     setCounter(i); 

     handler.postDelayed(this, 1000); 
     i++; 

    } else if(!isRunning) 
    { 
     if(Thread.currentThread().isAlive()) 
     { 
      Thread.currentThread().interrupt(); 
      Log.v("Current Thread:", ""+Thread.currentThread().toString()  ); 
     } else { 

      // Thread not alive 
     } 

    } 
} 

和恢復線程方法:

// Cannot restart a thread - you have to create a new one! 
public void resumeThrd() 
{ 
    // isRunning = true; 
    Log.v("isRunning Value:", "TRUE"); 

    // Create a new Thread to run 
    newThrd = new Thread(this); 
    newThrd.start(); 
} 

所以 - 我應該如何去做?我應該修改我的原始線程方法以允許輸入並在我的簡歷方法中調用它?這是安全的還是原始的線程仍然是活動的,創建一個新的線程只會減慢速度?

最後如何正確創建新線程?

回答

0

更好的辦法是創建不同的Runnable並使用Handler來管理所有Runnables。所以,最好的答案是使用Handler來管理你的線程。

Handler handler = new Handler(); 
handler.postDelayed(runnable, 1000); 

Runnable runnable = new Runnable() { 

     @Override 
     public void run() { 
      Log.d("runnable started", "inside run"); 
      handler.removeCallbacks(runnable); 
      handler.postDelayed(runnable, 1000); 
     } 
    }; 

你的情況,再次致電Runnable你需要火handler.postDelayed(runnable, 1000);並停止了Runnable點擊按鈕呼叫handler.removeCallbacks(runnable);

+0

所以基本上你在做什麼用的處理程序停止運行的,然後創建一個新的和運行? – Katana24 2011-12-29 14:56:41

+0

是的,而不是使用while(true){}運行線程,這是Android提供的最佳選擇。 – 2011-12-29 15:08:00