我确实有一个在前台启动的服务:
val notification = NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_stat_notify)
.setContentTitle(title)
.setTicker(message)
.setStyle(NotificationCompat.BigTextStyle().bigText(message))
.setContentText(message)
.setContentIntent(pendingIntent)
.build()
startForeground(Notifications.Id.RUNNING, notification)
请注意,我不使用setOngoing(true)
。
我在StackOveflow上找到了一些示例和答案,有些人正在使用setOngoing(true)
,有些则没有。例子:
另外,the Android documentation says:
前台服务是用户主动了解的服务 并且当内存不足时,它不是系统杀死的候选者。一个 前台服务必须提供状态栏的通知, 它位于正在进行的标题下。 这意味着 除非服务被停止,否则通知不能被驳回 或从前台删除。
并且,在文档中,setOngoing(true)
未设置:
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent =
PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification =
new Notification.Builder(this, CHANNEL_DEFAULT_IMPORTANCE)
.setContentTitle(getText(R.string.notification_title))
.setContentText(getText(R.string.notification_message))
.setSmallIcon(R.drawable.icon)
.setContentIntent(pendingIntent)
.setTicker(getText(R.string.ticker_text))
.build();
startForeground(ONGOING_NOTIFICATION_ID, notification);
忽略setOngoing(true)
有什么影响?
答案 0 :(得分:2)
当您启动服务并使用startForeground(int, Notification)
在前台运行服务时,您传递的通知将成为标记FLAG_FOREGROUND_SERVICE(请参阅here)。
然后,在您的通知实际发布到状态栏NotificationManagerService
之前,检查是否设置了FLAG_FOREGROUND_SERVICE
,如果是,则会添加标记FLAG_ONGOING_EVENT(请参阅here )这是手动使用setOngoing(true)
时将设置的相同标志(请参阅here)。