【问题标题】:Thread Runnable - stop and resume线程可运行 - 停止和恢复
【发布时间】:2013-05-14 13:08:31
【问题描述】:

您好,我是 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()方法我不知道如何重新开始线程的执行。

你能帮帮我吗?

【问题讨论】:

    标签: java android multithreading runnable resume


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 所以每次调用 StartTrack 方法时我都必须创建一个新线程(首先检查是否还没有一个正在运行)如何在不知道线程数的情况下创建 x 个不同的线程?我必须为每个人定义一个不同的名称吗?我不知道怎么。你能帮我吗?
      【解决方案3】:

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

      【讨论】:

      • 所以每次调用 StartTrack 方法时我都必须创建一个新线程(首先检查是否没有一个正在运行)如何在不知道线程数的情况下创建 x 个不同的线程?我必须为每个人定义一个不同的名称吗?我不知道怎么。你能帮帮我吗?
      【解决方案4】:

      我解决了:

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

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

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

      在“LogOut()”方法中,如果线程启动,我停止它,并将它设置为空。

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

      public void LogOut()
      {
          mContinueThread=false;
          if (mThreadIsStarted)
          {
              //THREAD STOP
              mContinueThread=false;
              mThreadIsStarted=false;
      
              //THREAD TO NULL
              t=null;
          }
      
          ...
      }
      

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 2021-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多