android:如何停止并启动一个线程(带有错误的代码示例)

时间:2013-06-19 17:13:46

标签: android multithreading

我尝试在应用中创建一个帖子。这是代码:

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

时,我的应用程序就会挂起

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

1 个答案:

答案 0 :(得分:2)

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

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

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