我的应用程序有一个后台服务在运行,每五分钟获取用户当前位置并将其更新到服务器。为了持续运行此位置更新过程,我使用闹钟管理器从服务本身设置下一次执行时间。然而,当我在运行Android 8.1的Nokia 6上安装应用程序时,它能够工作一段时间,但如果我让手机空闲一段时间,我的服务将被杀死,并且下一个闹钟也会被清除。我猜测是因为空闲时间使手机进入待机模式。然而,我不明白为什么闹钟管理器会被清除。据我理解,待机模式应该定期打开维护窗口以执行任何未完成的任务。
为了缓解这个问题,我尝试在闹钟管理器之上应用作业调度程序服务,每15分钟运行一次。这个作业调度程序的目的是重新启动具有闹钟管理器的服务,因此即使它被杀死并且闹钟被清除,作业调度程序也会重新启动服务。
在我测试了这个补丁并将其保留一段时间进入空闲模式后,结果是作业调度程序服务和具有闹钟的服务都被杀死,并且计划的作业和闹钟也从系统中清除了。
为了缓解这个问题,我尝试在闹钟管理器之上应用作业调度程序服务,每15分钟运行一次。这个作业调度程序的目的是重新启动具有闹钟管理器的服务,因此即使它被杀死并且闹钟被清除,作业调度程序也会重新启动服务。
在我测试了这个补丁并将其保留一段时间进入空闲模式后,结果是作业调度程序服务和具有闹钟的服务都被杀死,并且计划的作业和闹钟也从系统中清除了。
据Android文档所述,我们可以使用JobScheduler来缓解其后台执行限制。为了测试这一点,我在测试应用程序时强制终止了两个服务,但已经预定的作业并没有被清除,这使得带有警报的服务再次成功运行。我不明白这种行为的原因,尽管Evernote的人在这里Android Job by Evernote给出了一个可能符合这种情况的解释。
对于这种异常行为有什么想法吗?
测试环境详细信息
- 设备:Nokia 6(TA-1021)
- 操作系统:Android 8.1.0