重新启动一个线程

时间:2011-12-29 12:58:09

标签: android

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

这就是我的意思:

1)自动调用的第一个线程 - 就像一个简单的计数器,使用'implements runnable'线程方法创建

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

那么 - 我应该怎么做呢?我应该修改我的原始线程方法以允许输入并在我的resume方法中调用它吗?这是安全还是原始线程仍然处于活动状态并且创建一个新线程只会减慢速度?

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

1 个答案:

答案 0 :(得分: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);