1

我试图在应用程序中创建一个线程。这是代码:

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();

那么,基于上面的代码示例,线程的正确方法是stop什么restart

4

1 回答 1

2

您应该调用 GetFileTask.start() 这将导致 run() 方法在线程中执行。

直接调用 GetFileTask.run() 只会在调用线程上执行该代码,这不是您想要的,因为 Sleep() (以及任务本身所需的时间)然后会阻塞调用线程。

编辑:请注意,在线程的同一实例上第二次调用 start() 是不合法的。

于 2013-06-19T18:56:21.350 回答