【问题标题】:I run multiple async tasks at once and I want to close only one of the three我一次运行多个异步任务,我只想关闭三个任务之一
【发布时间】:2012-02-11 20:49:30
【问题描述】:

我在其中一项活动中运行了一个 asynctasks 类 3 次,我想知道如何单独取消其中一项。每个人都从服务器下载一个文件,该文件始终是不同的文件,我想知道如何只取消我选择的三个文件中的一个?

【问题讨论】:

  • 哦,仅供参考,在 Honeycomb & ICS 中,AsyncTask 的标准行为已从允许并行任务更改为串行执行程序 - 您需要使用 executeOnExecutor(Executor, Params.. .) 而不是 execute(Params...)

标签: java android asynchronous android-asynctask


【解决方案1】:

保留对它们中的每一个的引用,然后在其中提供一个方法来取消它们。在要取消的那个上调用该方法。

private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
    boolean cancelled = false;
    public void cancel() {
        cancelled = true;
    }

    public void doInBackground() {
        while(!cancelled) {
            ...
    }
    ...
}

...

MyAsyncTask task1 = new MyAsyncTask().execute();
MyAsyncTask task2 = new MyAsyncTask().execute();
MyAsyncTask task3 = new MyAsyncTask().execute();

...

if(needToCancelTask2) {
    task2.cancel();
}

【讨论】:

  • 这完全是 冗余 btw - AsyncTask 已经实现了适当的取消方法 - AsyncTask#cancel(boolean),允许您还控制是否应该中断工作线程。在 doInBackground 实现中,您通常检查 AsyncTask#isCancelled()
  • 哈!太真实了。不错的收获,我不知道为什么我从来没有注意到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2014-02-11
  • 2011-04-15
  • 1970-01-01
相关资源
最近更新 更多