我们偶然发现了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服务时),而只是让它在后台运行而不会打扰用户。