我有一個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