Java 触发更新后应用程序被销毁后,通知被解除

Java 触发更新后应用程序被销毁后,通知被解除,java,android,service,Java,Android,Service,android文档声明,要启动服务,必须实现onStartCommand。当我创建了服务,并使用ContextCompat.startForegroundService(…)启动服务时,就会执行onStartCommand方法,此时即使我退出应用程序,服务也不会停止(如预期的那样) 但是,后来当我通过更改显示的文本来更新通知时,我使用了notificationManager.notify()方法,现在当我退出应用程序时,服务会自动停止。我想知道我们是否会在每次通知更新时强制调用onStartCo

android文档声明,要启动服务,必须实现
onStartCommand
。当我创建了
服务
,并使用
ContextCompat.startForegroundService(…)
启动服务时,就会执行
onStartCommand
方法,此时即使我退出应用程序,服务也不会停止(如预期的那样)

但是,后来当我通过更改显示的文本来更新通知时,我使用了
notificationManager.notify()
方法,现在当我退出应用程序时,服务会自动停止。我想知道我们是否会在每次通知更新时强制调用onStartCommand(比如我们是否应该使用
ContextCompat.startForegroundService
更新通知?我已经从
api级别19
测试到
api级别27
,行为都是一样的。即使在更新通知后,我如何在
启动时维护服务的属性

我想知道我们是否要在每次通知更新时强制调用
onStartCommand

不,在每次通知更新时,您不会被强制调用
onStartCommand

不知何故(比如我们是否应该使用
ContextCompat.startForegroundService
更新通知?我已经从API级别19测试到API级别27,行为都是一样的。即使在更新通知后,我如何保持服务的属性为已启动

您应该只调用
ContextCompat.startForegroundService
一次,以启动
ForegroundService

为了在退出应用程序时更新
ForegroundSerice
通知而不被销毁,您可以在每次更新前台服务通知时使用

这方面的一个著名示例是使用下载进度将下载服务更新为
ProgressBar

重要的一点:您需要确保在调用
startForeground()时使用相同的通知ID

startForeground()
不会调用
onStartCommand
;如果可能的话,那么我想这将是一个无休止的循环

每当您要停止前台服务并提交正常通知(下载示例中的下载完成)时,您都可以使用
notificationManager.notify()
,提交正常通知,这将允许用户通过滑动来取消通知

更新:如聊天中所述 问题:在前台服务停止后提交正常通知时,正常通知也会被取消

原因:这是因为您使用了与前台服务相同的通知ID,因此停止前台服务也将取消正常通知

解决方案:确保前台服务通知和停止前台服务时发送的正常通知具有不同的通知ID

另外,请确保拨打以下电话以停止前台服务:

stopForeground(true);
stopSelf();

您好,在前台服务运行时如何更新通知?@Zain,您好,正如我所提到的,我使用
notificationManager.notify(…)
方法在应用程序UI处于活动状态时更新通知(即未调用onDestroy或onPause).我实际上使用该服务播放音乐,但是,当音乐播放时,这似乎起作用,我销毁了应用程序,但即使我使用
startForeground()
对于在暂停时更新通知,在我暂停音乐并退出应用程序后,服务被破坏,你知道为什么会发生这种情况吗?我也不会在暂停期间解除服务或任何东西的绑定,我实际上调用了相同的播放方法,但只使用不同的图标更新通知我发现了原因我在更新通知时调用了stopForeground(false),现在,它没有被销毁,但是用户无法刷消通知,我甚至调用了notificationManager.notify()方法,您知道原因吗?在提交任何notificationManager之前,您必须在某处调用stopForeground以停止前台服务。notify()很高兴它起到了作用。.当然会更新它。.谢谢兄弟:)