在Android Oreo及更高版本中,启动完成后服务不会自动重新启动。这是由于Android Oreo引入了一种新的行为模式,即后台限制。该行为模式旨在减少后台应用对系统资源的占用,从而提高设备性能和电池寿命。根据这种行为模式,Android Oreo限制了在后台运行的服务的功能。
具体来说,当应用进入后台时,服务将被视为后台服务。这意味着服务将受到一些限制,例如无法无限期地在后台运行。如果服务在后台运行超过一定时间(通常为数分钟),系统将认为该服务不再处于活动状态,并停止服务。这导致在Android Oreo下,启动完成后服务不会自动重新启动。
为了解决这个问题,开发人员可以采取以下措施:
- 后台限制适配:在AndroidManifest.xml文件中,将服务的android:stopWithTask属性设置为false。这样,服务将不会随着应用进入后台而停止。然而,这并不能保证服务将一直在后台运行,因为系统仍然可能会在一定时间后停止服务。
- 前台服务:将服务升级为前台服务。前台服务是一种在状态栏中显示通知的服务,可以向用户展示正在进行的任务。这样,服务将被视为更重要的服务,可以更长时间地在后台运行。但是,前台服务需要与用户进行互动,并向用户提供实时的通知。
- JobScheduler:使用JobScheduler API调度任务。JobScheduler是一种用于安排延迟执行任务的API,可以在系统资源允许的情况下执行任务。使用JobScheduler API,可以更好地控制服务的执行时间和频率,从而避免被后台限制。
- 后台限制白名单:如果您的应用确实需要在后台运行长时间的服务,可以请求用户将应用添加到系统的后台限制白名单中。用户可以通过以下步骤将应用添加到白名单中:设置 -> 电池 -> 电池优化 -> 不优化 -> 所有应用。请注意,这种方法需要用户手动操作,并不适用于所有情况。
关于Android Oreo下服务未重新启动的更多信息,请参考腾讯云文档中关于应用后台限制的说明:腾讯云文档-Android后台限制