[英]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.