我有一个listview包含很多歌曲。每次点击一首歌曲时,我都会调用一个IntentService来按顺序下载这首歌。
但有时我想取消下载(例如:第5次)。这意味着我需要停止第5次运行的IntentService。我试图通过调用stopService()来阻止它,但它不起作用。
有人能告诉我一个停止IntentService的好方法吗?非常感谢你的帮助。
答案 0 :(得分:12)
清单中每个IntentService
元素只有一个正在运行<service>
。如果您拨打startService()
六次,则最多只有一个IntentService
正在运行。如果onHandleIntent()
在发送另一个命令时正在处理命令,则命令将按IntentService
排队并一次处理一个。
在您的情况下,由于您无法轻松取消IntentService
的未完成命令,因此您可能需要创建自己的IntentService
版本,在其中创建自己的Service
子类它自己的工作队列,您可以在其中取消尚未运行的命令。
答案 1 :(得分:1)
使用intentservices下载时遇到了同样的问题。 在我的应用程序中,每个下载都有自己的通知,点击它时我想停止下载。
我通过重写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。