服务未重新启动

时间:2019-07-01 09:07:33

标签: android service

我们偶然发现了Android 8.1及更高版本中的一个问题,这是我们之前从未见过的,但是不幸的是,这使我们的应用程序对用户的便利性降低了。当用户滑动杀死应用程序时,不会重新启动Android 8.1及更高版本中的后台粘性服务。

在Android 8.0及更低版本中,对于在后台始终可用的服务寄予厚望,尤其是对于那些作为“粘性服务”实现的服务。

总而言之,在最近的应用程序列表中,一次轻扫杀死过程中不会重新启动非粘性服务。对于粘性服务(应用程序宿主与服务一起使用),该应用程序在终止后不久会重新启动。实际上,即使在轻描淡写的情况下,前台服务应用程序也永远不会被杀死。

这可以按预期工作,并且在Android 8.0及更高版本中可以正常使用。因此,在一次轻击之后,会在很短的时间内重新创建应用程序进程,然后调用onCreate和onStartCommand,从而再次完全启动该服务。

但是从Android 8.1开始,省略了onStartCommand调用。因此,我们没有获取onCreate和OnStartCommand,而是获取了onCreate和OnDestroy。这实际上不会使服务再次激活。不用说,我们也不能手动在onCreate中启动我们自己的服务。

我认为下面的article非常清楚地显示了非粘性服务,粘性服务和前台服务之间的差异(并带有功能代码)。

在Android 8.1及更高版本中,省略了onStartCommand调用(因此该服务不会重新启动)。因此,我们在重新创建应用程序时获取了onCreate和OnDestroy,而不是使用onCreate和OnStartCommand。

此外,我们不希望始终在顶部持久显示可见的应用程序图标(如使用setForeground服务时),而只是让它在后台运行而不会打扰用户。

2 个答案:

答案 0 :(得分:1)

不要优化电池可能会使您的服务正常运行 您还可以在固定时间后使用AlarmManager重新启动服务

它可以帮助click

答案 1 :(得分:0)

Android 8不应在后台启动服务,而必须在前台启动服务。

我使用Google link支持的android workManager的建议

workManager是用于处理服务和调度程序任务的稳定可靠的库