繁体   English   中英

线程可运行-停止并继续

[英]Thread Runnable - stop and resume

您好,我是Android(Java)的新手,我在使用线程时遇到问题

我在我的android Project的类中定义了一个新的线程(每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
    {

    }
}

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

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

如果在类Logout()方法中执行了该线程,则停止该线程,但是如果再次调用StartTrack()方法,我将不知道如何重新开始执行该线程。

你能帮助我吗?

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

您无法重新启动线程。 一旦线程完成执行,它将达到DEAD状态。 无论是DEAD还是DEAD,无论在现实世界还是JAVA世界中,都无法重现。

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

我这样解决了:

在我的课程中,我只定义了Runnable对象,而不是新的Thread。

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

public void StartTrack()
{
    mContinueThread=true;

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

在“ LogOut()”方法中,如果启动了线程,则将其停止,并将其设置为Null。

这样,在下一次调用“ StartTrack()”方法时,我可以再次重新创建它

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

        //THREAD TO NULL
        t=null;
    }

    ...
}

我建议最好使用Timer之类的东西来代替线程。

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

然后,如果要停止执行任务并通过计划新任务来恢复执行,可以执行cancel()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM