JobScheduler Android Oreo问题

6
在我目前为一家公司申请的应用中,我有一个前台服务,在工人值班(登录到应用程序)时运行。重要的是要保持该前台服务在用户登录时运行。为了从这个前台服务被意外杀死的情况中恢复(用户任务意外滑动或系统杀死),我使用了具有 Jobscheduler 的定期 JOB,以便在关闭时重新激活 ForegroundService。这种技术在 Android 8 OREO 之前很有效。START_STICKY 和其他技术单独使用对我来说并没有起作用。
在 Android 8 中,一旦前台服务被杀死,定期作业也会被杀死。我在 logcat 中收到通知,说明该作业不允许运行。据我所知,即使应用程序在后台或已关闭,作业也应该能够运行。它在预先 OREO 设备上的工作方式就是应该的。
据我所知,我可以通过在应用程序设置中启用“自动启动”选项来解决这个问题。但由于没有办法知道员工是否打开了它,因此这也不是一种可靠的方法。
所以我的问题是: - 为什么作业调度程序在 Android 8 中停止按照应该的方式工作? - 是否有其他可靠的技术可以让我的 ForegroundService 在 ANDROID OREO 中从关闭中恢复?

我已经阅读了 https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c 但那并没有回答我的问题。

非常感谢。


1
我知道我并没有直接回答你的问题,但是你的实现需要一个一直运行的服务(不太好)。也许你可以编辑并更详细地解释你的需求,我相信有更好的方法。 - shkschneider
当工人登录应用程序时,我需要GPS跟踪,因为他们要向客户交付货物。客户想知道货物的位置。我的第一个实现没有使用前台服务,而是使用作业发送周期性GPS坐标到我们的后端。但由于小米和华为定制的安卓系统,这不够可靠,令人头疼。 - Al Cabone
我知道自定义ROM可能会很麻烦,但我觉得你之前的实现是正确的。 - shkschneider
是的,它们是 :/。之前的实现不可靠,因为受到了省电模式和电池优化的影响。对于我的用例来说,这种实现是不够的,因为有时即使在原生安卓上,由于省电模式的影响,我每3个小时才能接收到一次 GPS 更新等。但我需要每15分钟更新一次。 - Al Cabone
2个回答

0

是的,我尝试过了,但不幸的是对我没有起作用。任务调度程序在奥利奥系统上无法运行。但还是谢谢! - Al Cabone

0

阅读一些参考资料:

1- 如果Andreo Oreo中的服务存在漏洞,Oreo会在7个能量损失后杀死它,这是一个警告,但在8中应用更加严格。

2- 作业调度程序有15分钟的时间,avaces没有在精确的时间借记执行,他们寻找精确的时刻来执行事件,而不会使手机电池耗尽。

我建议您使用Evernote提供的这个非常好、非常具体的库:

https://github.com/evernote/android-job


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接