android:如何停止和启动线程(带有错误代码示例)
我试图在应用程序中创建一个线程。代码如下:android:如何停止和启动线程(带有错误代码示例),android,multithreading,Android,Multithreading,我试图在应用程序中创建一个线程。代码如下: private class GetFileTask extends Thread { private volatile boolean mKeepRunning = false; public GetFileTask() { super("GetFileTask"); } /** Cancel task */ public void cancel() { mKee
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()是不合法的。我不明白为什么应用程序应该挂起。除非doTask正在做一些愚蠢的事情。我想我已经通过调用cancel()停止了run(),所以while循环被破坏了。因此,当我再次调用run()时,线程没有处于睡眠状态all@ChrisStratton同意。他应该调用GetFileTask.start()
并且他正在调用sleep
,在这种情况下,中断状态将被清除,它将收到一个InterruptedException
。因此调用interrupted()
将返回true?。那么它会接收到中断异常吗?。。文档澄清了我的疑问。@Raghunandan-海报并没有中断线程,而是通过否定volatile标志变量mKeepRunning发出信号,使其退出while循环。但是,根据您链接的文档,第二次调用start()是不合法的。