我有一个Service
便于从服务器下载文件的工具。每次Intent
收到 an 时onStartCommand
,我都会启动一个新Thread
的 ,将Thread
要下载的 url 作为键放入地图中,并创建一个通知以显示下载进度。如果映射中没有Thread
s,则在 中设置一个标志Thread
,表示它应该在创建或更新startForeground
时使用。Notification
随后Thread
的 s/ Notification
s 显示NotificationManager.notify
与FLAG_AUTO_CANCEL
off 和FLAG_ONGOING_EVENT
on 一起使用。每个Thread
都有自己的唯一 id 发送到startForeground
or notify
。当文件完成下载,或用户取消下载(通过按下Notification
按钮RemoteView
,如果调用的是“前台线程/通知” stopForeground(true)
,Notification
则填充新RemoteView
的显示下载是否完成,并且下一次运行Thread
将其“前台”标志设置为true
。
问题是,如果我有两个文件下载,会有一个Notification
/Thread
连接到startForeground
一个,一个没有。如果我取消“前景”,一切都很好。但是,如果我按下非前景按钮上的取消按钮,前景按钮将被关闭(再次按下取消按钮将关闭正确的按钮)。如果我不取消任何一个,并且我开始第 3 次下载,该下载在其他人之前完成,则Notification
显示已完成,但其他两个仍将开始闪烁并在状态栏中快速上下移动。
我如何确保Service
只要有下载,通知将始终位于前台,而不会在上述情况下跳来跳去,并且取消工作正常?