我试图在应用程序中创建一个线程。这是代码:
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 文档,我知道我不应该使用暂停/暂停。我尝试通过调用 cancel();
取消线程,并尝试通过调用 run();
重新启动线程
但是,当我调用 run();
那么,根据上面的代码示例,停止
和重新启动
线程的正确方法是什么?
最佳答案
您应该调用 GetFileTask.start(),这将导致在线程中执行 run() 方法。
直接调用 GetFileTask.run() 只会在调用线程上执行该代码,这不是您想要的,因为 Sleep()(以及任务本身所需的时间)随后会阻塞调用线程。
编辑:请注意,在线程的同一实例上第二次调用 start() 是不合法的。
关于android:如何停止和启动线程(带有错误代码示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197338/