我尝试在应用中创建一个帖子。这是代码:
private class GetFileTask extends Thread {
private volatile boolean mKeepRunning = false;
public GetFileTask() {
super("GetFileTask");
}
/** Cancel task */
public void cancel() {
mKeepRunning = false;
interrupt();
}
@Override
public void run() {
mKeepRunning = true;
while (true) {
try {
doTask();
Sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!mKeepRunning) {
break;
}
}
}
private void doTask() {
}
}
我试图让用户取消下载(取消线程),然后再开始从零开始下载(重新启动线程)。我读了android sdk doc,我知道我不应该使用pause / suspend。我试图通过调用cancel();
来取消线程,并尝试通过调用run();
来重新启动线程
但是,当我拨打run();
那么,基于上面的代码示例,stop
和restart
线程的正确方法是什么?
答案 0 :(得分:2)
你应该调用GetFileTask.start(),它将导致run()方法在线程中执行。
直接调用GetFileTask.run()只是在调用线程上执行该代码,这不是你想要的,因为Sleep()(以及任务本身所需的时间)将阻塞调用线程。
编辑:请注意,在同一个线程实例上再次调用start()是不合法的。