我有一个Service
,便于从服务器下载文件。每次Intent
收到onStartCommand
时,我都会开始新的Thread
,将Thread
放入地图中,并将网址作为密钥下载,然后创建通知显示下载的进度。如果地图中没有Thread
,则Thread
中会设置一个标记,表示在创建或更新startForeground
时应使用Notification
。使用Thread
并关闭Notification
和NotificationManager.notify
时,会显示后续的FLAG_AUTO_CANCEL
s / FLAG_ONGOING_EVENT
。每个Thread
都有自己唯一的ID,发送到startForeground
或notify
。当文件下载完毕或用户取消下载时(通过按Notification
的{{1}}中的按钮,如果是“前台线程/通知”,则RemoteView
是在调用时,stopForeground(true)
会填充一个新的Notification
,显示下载是否已完成,下一个正在运行的RemoteView
将其“前景”标记设置为Thread
。
问题是,如果我有,假设有两个文件下载,则会有一个true
/ Notification
连接到Thread
而另一个不连接。如果我取消“前景”,一切都很好。但是,如果我按下非前景按钮上的取消按钮,前一个按钮将被解除(再次按下取消按钮将取消正确的按钮)。如果我没有取消任何,并且我开始第三次下载,在其他人之前完成,已完成的startForeground
显示,但其他两个仍然开始闪烁并在状态栏中快速上下移动
如果正在进行下载,并且在上述情况下没有通知跳转,并且取消正常工作,我如何确保Notification
始终位于前台?
答案 0 :(得分:2)
我最终做的是在名为Service
的{{1}}中创建一个变量,该变量对所有isInForeground
都是全局的。它表示是否已调用Thread
,而后续调用startForeground
。
在我的stopForeground
方法中,我会检查updateNotification
。如果是isInForeground
我将其设置为false
,请将true
的{{1}}标记设置为Thread
,并使用isForegroundNotification
调用true
{1}} startForeground
。在我的Thread
方法中,如果Notification
的{{1}}为stopNotification
,我将其设置为Thread
为isForegroundNotification
并致电{{1} }}