重新启动线程

问题描述:

我设法让我的线程安全地运行和停止,但是我想知道什么是启动另一个线程的最佳选择?我知道你不能重新启动一个线程,所以我必须创建一个新线程。重新启动线程

这里是我的意思:自动调用

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(); 
} 

所以 - 我应该如何去做?我应该修改我的原始线程方法以允许输入并在我的简历方法中调用它?这是安全的还是原始的线程仍然是活动的,创建一个新的线程只会减慢速度?

最后如何正确创建新线程?

更好的办法是创建不同的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