Thread Runnable - 停止并恢复

时间:2013-05-14 13:08:31

标签: java android multithreading runnable resume

你好我是Android(Java)的新手,我遇到了使用线程

的问题

我在我的android项目类中定义了新的Thread timed(每5秒)。 “mContinueThread”变量用于每隔5秒进行一次

r = new Runnable() {
    public void run() {
        while (mContinueThread) {
            try {
                Thread.sleep(MILLISEC_BEFORE_RELOAD);
                mHandler.sendEmptyMessage(GET_TRACKING);
            }
            catch (Exception e)
            {

            }
        }
    }
};
t = new Thread(r);

在CLass中有一个以Thread

开头的方法StartTrack()
public void StartTrack()
{
    mContinueThread=true;
    if (!mThreadIsStarted)
    {
        mThreadIsStarted=true;
        t.start();
    }
    else
    {

    }
}

并且还有一个使用“mContinueThread”变量停止线程的Logout方法:

public void LogOut()
{
    //STOP THREAD
    mContinueThread=false;
    ....
}

如果在类Logout()方法中执行线程停止,但如果再次调用StartTrack()方法,我不知道如何重新启动线程的执行。

你能帮助我吗?

5 个答案:

答案 0 :(得分:1)

您可以在Android中使用AsyncTask。这将消除手动管理线程的负担。请访问http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:0)

您无法重新启动线程。一旦线程执行完毕,它将达到DEAD状态。无论是在现实世界还是在JAVA世界,DEAD无论如何都无法恢复生机。

答案 2 :(得分:0)

只要退出线程,就无法重新启动线程。你可以重新开始。

答案 3 :(得分:0)

我解决了这个问题:

在我的课程中,我只定义了Runnable对象,但没有定义新的Thread。

在StartTrack方法()中,如果线程尚未实例化,我创建并启动

public void StartTrack()
{
    mContinueThread=true;

    if (!mThreadIsStarted)
    {
        mThreadIsStarted=true;
        t = new Thread(r);
        t.start();
    }
}

在“LogOut()”方法中,如果Thread已启动,我将其停止,并将其设置为Null。

通过这种方式,在下次调用“StartTrack()”方法时,我可以重新创建它

public void LogOut()
{
    mContinueThread=false;
    if (mThreadIsStarted)
    {
        //THREAD STOP
        mContinueThread=false;
        mThreadIsStarted=false;

        //THREAD TO NULL
        t=null;
    }

    ...
}

答案 4 :(得分:-1)

我建议最好使用Timer之类的东西而不是线程。

http://developer.android.com/reference/java/util/Timer.html

如果要停止执行任务,可以执行cancel() 并通过安排新的来恢复它。