2

我有一个用户可以点击下载的项目列表。我有这个代码:

//Maintained this in my ListAdapter class so that if user clicks on cancel download i can do:
// tasks.get(info.getFieldID()).cancel(true);

public static Map<String, Future<Object>> tasks = new HashMap<String, Future<Object>>();
    Future f = downloadExecutor.submit(new Callable<Object>() {
         // do downloading.
    }
    tasks.put(key,f);

当用户通过调用 tasks.get(key).cancel(true); 点击取消时,我试图取消相应的下载;

但我的任务并没有被取消。

几个问题:

  1. 通过维护适配器类中的未来对象列表,我做错了什么吗?

  2. 当用户单击按钮时,我应该如何取消任务?

  3. 另外我怎么知道任务已被取消?

我已经阅读了有关 ExecutorService 的信息,但我对实现有点困惑。

4

1 回答 1

0

你真的是在一起问几个问题。您的问题背后的逻辑似乎是将物理操作(按下按钮)与可执行操作(取消任务)联系起来。

简单来说,您似乎认识到需要存储对任务的引用才能取消它。在伪代码中(因为您的特定实现可能不同),您需要类似:

Button myButton = (Button)findViewById(R.id.mybutton);
myButton.setOnClickListener(new OnClickListener() {
    @Override
    onClick(View v) {
        tasks
             // retrieve the proper task based on the button
             .get(oneKey)
             // once you have the task, cancel it
             .cancel(true);
    }
});

在上面的代码中,每个按钮都将与您选择的任何任务相关联,您可以通过硬编码或传递变量来完成。

使用哈希表,检索您想要的任务。然后使用它的cancel方法取消它。

于 2015-09-14T14:08:42.020 回答