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

标签 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 文档,我知道我不应该使用暂停/暂停。我尝试通过调用 cancel(); 取消线程,并尝试通过调用 run(); 重新启动线程 但是,当我调用 run();

时,我的应用挂起

那么,根据上面的代码示例,停止重新启动 线程的正确方法是什么?

最佳答案

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

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

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

关于android:如何停止和启动线程(带有错误代码示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197338/

相关文章:

android - 待定 Intent 未启动

java - 有什么理由不总是使用 AtomicInteger 作为数据成员吗?

Java:如果另一个线程已经在其中,则新线程将跳过同步方法

python - 如何正确确保使用共享锁的线程终止?

c# - 将异步操作结果返回给原线程

android - 如何监控 android adb logcat 并执行 grep?

android - 如何将文档快照(复杂对象)保存到共享首选项或文件?

java - 按下按钮时布局展开

java - 使用和/或提取可扩展文件 (obb) android

c# - Invoke 在底层是如何工作的?线程不是只有 1 个指令指针吗?