4

我有一个包含许多歌曲的列表视图。每次点击一首歌,我都会调用一个 IntentService 来按顺序下载这首歌。

但有时我想取消下载(例如:第 5 次)。这意味着我需要停止第 5 个正在运行的 IntentService。我试图通过调用 stopService() 来停止它,但它不起作用。

谁能告诉我停止 IntentService 的好方法?非常感谢你的帮助。

4

2 回答 2

12

清单中的IntentService每个元素只有一个 running 。<service>如果您调用startService()六次,最多IntentService将运行一次。onHandleIntent()如果在IntentService发送另一个命令时正在处理一个命令,则命令将排队并一次处理一个。

在您的情况下,由于您无法轻松取消未完成的命令IntentService,因此您可能需要创建自己的版本IntentService,在其中创建Service具有自己的工作队列的自己的子类,您可以在其中取消尚未完成的命令跑步。

于 2013-03-21T13:50:01.597 回答
1

我在使用意图服务下载时遇到了同样的问题。在我的应用程序中,每次下载都有自己的通知,单击它时我想停止下载。

我通过覆盖 onStartCommand() 方法(在新意图到达时调用)解决了这个问题。当我想关闭一个下载时,我开始使用一个名为“stopid”的新意图:

Intent stopIntent = new Intent(DialogActivity.this,DownloadIntentService.class);
stopIntent.putExtra("stopid", id);
startService(stopIntent);

onStartCommand() 方法如下所示:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    int id = intent.getExtras().getInt("stopid");
    if(id!=0) {
        stopList.add(id);
    }
    return super.onStartCommand(intent, flags, startId);
}

对于普通的意图,只需将下载的 id 作为额外的内容放在您的意图中。在 onHandle() 方法中进行下载时,经常检查 stopList 是否包含您当前下载意图的 id。如果是,请停止下载并从 stopList 中删除 id。

于 2013-06-01T15:05:44.020 回答