我有一个listview包含很多歌曲。每次点击歌曲时,我都会调用IntentService按顺序下载该歌曲。如何停止一个IntentService同时有很多IntentService正在运行
但有时我想取消下载(例如:第5次)。这意味着我需要停止第5次运行IntentService。我试图通过调用stopService()来停止它,但它不起作用。
任何人都可以告诉我一个很好的方法来停止IntentService吗?非常感谢你的帮助。
我有一个listview包含很多歌曲。每次点击歌曲时,我都会调用IntentService按顺序下载该歌曲。如何停止一个IntentService同时有很多IntentService正在运行
但有时我想取消下载(例如:第5次)。这意味着我需要停止第5次运行IntentService。我试图通过调用stopService()来停止它,但它不起作用。
任何人都可以告诉我一个很好的方法来停止IntentService吗?非常感谢你的帮助。
您的清单中只有一个运行IntentService
,根据<service>
元素。如果您拨打startService()
六次,则最多只有一个IntentService
正在运行。如果在发送另一个命令时IntentService
正在处理命令,那么命令将排队并在onHandleIntent()
中一次处理一个命令。
在你的情况,因为你不能轻易取消与IntentService
一个优秀的命令,你可能需要创建IntentService
,你有自己的工作队列,一个在那里你有能力创建自己的Service
子你自己的版本取消尚未运行的命令。
我在使用intentservices下载时遇到同样的问题。 在我的应用程序中,每个下载都有自己的通知,点击它时我想停止下载。
我通过覆盖onStartCommand()方法(当新的intent到达时调用)来解决它。 当我想关闭一个下载,我开始了新的意图有一个额外的称为“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。
在最新的android引用中,注意到这个方法不应该被覆盖。如果注释被忽略,那么所提到的问题原来的海报是用你的方法解决了什么风险? – 2014-03-28 21:48:23
我想通过这个,你杀了第一个随机过程 - 这可以证明吗?如果是这样,那么你需要识别每个进程的PiD,我不太清楚如何做到这一点,但给我一些时间,我想我可以找到一些东西。 – g00dy 2013-03-21 13:48:09