你好我是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()方法,我不知道如何重新启动线程的执行。
你能帮助我吗?
答案 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() 并通过安排新的来恢复它。