我有一個Service
,便於從服務器上下載文件。每次在onStartCommand
收到一個Intent
,我開始一個新的Thread
,將Thread
放入一個映射中,將url作爲密鑰下載,並創建通知以顯示下載進度。如果地圖中沒有Thread
s,則在Thread
中設置一個標誌,表示在創建或更新Notification
時應使用startForeground
。隨後的Thread
s/Notification
s使用NotificationManager.notify
顯示,其中FLAG_AUTO_CANCEL
off和FLAG_ONGOING_EVENT
。每個Thread
都有其自己的唯一ID,發送到startForeground
或notify
。當文件完成下載時,或者用戶取消下載(通過按下Notification
的RemoteView
的按鈕,如果它是「前臺線程/通知」,則調用stopForeground(true)
,Notification
將填充新的RemoteView
,它顯示下載是否完成與否,與下運行Thread
有其「前景」標誌設置爲true
。Android服務多線程和startForeground()
的問題是,如果我有,比方說,兩個文件下載,將有一個Notification
/Thread
即連接到startForeground
和一個不是,如果我取消「前景」一個,一切都很好,但是,如果我按下非前景的取消按鈕,前景一個被取消(並按下取消l按鈕將再次解除正確的按鈕)。如果我不取消任何操作,並且我開始第三次下載完成之前,完成Notification
顯示,但其他兩個仍將開始閃爍並迅速在狀態欄中上下移動。
只要下載正在進行,沒有上述情況的通知跳轉,並且取消工作正常,我如何確保Service
始終處於前臺?