0

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

我在我的 android 项目的一个类中定义了一个新的线程定时(每 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 中有一个方法 StartTrack() 以 Thread 开头

public void StartTrack()
{
    mContinueThread=true;
    if (!mThreadIsStarted)
    {
        mThreadIsStarted=true;
        t.start();
    }
    else
    {

    }
}

还有一种方法 Logout 可以停止线程,使用“mContinueThread”变量:

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

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

你能帮助我吗?

4

5 回答 5

1

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

于 2013-05-14T14:15:21.553 回答
0

我这样解决了:

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

在StartTrack方法()中,如果线程还没有被实例化,我创建并启动

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

    ...
}
于 2013-05-15T07:28:55.043 回答
0

您无法重新启动线程。一旦线程完成执行,它将达到 DEAD 状态。无论是在现实世界中还是在 JAVA 世界中,任何已死的东西都无法再次复活。

于 2013-05-14T13:12:15.313 回答
0

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

于 2013-05-14T13:13:17.380 回答
-1

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

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

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

于 2013-05-14T13:49:51.823 回答