使用作业调度程序管理定期任务?
Posted
技术标签:
【中文标题】使用作业调度程序管理定期任务?【英文标题】:manage periodic tasks with job Scheduler? 【发布时间】:2017-07-15 20:19:33 【问题描述】:基本上我想做的是,当有互联网连接时,然后从传感器收集值并安排下一次从传感器收集数据的时间,比如说 5 分钟(这个间隔取决于当前的活动:步行、跑步。 ..)。 5分钟后,系统会检查是否有网络连接:
-如果有则重复循环(收集,发送到服务器并安排下一次数据收集)
*如果没有,则下一次收集数据的时间安排在下一次有可用的互联网连接时
我尝试使用什么:
1) 我想为 api=21 使用作业调度程序。 对于作业调度程序,我无法同时设置需求可用网络并使作业定期进行,因为这样无论是否满足要求,作业都会在周期结束后运行。
2)我试图让作业服务在当前作业结束后设置下一个作业,但应用程序运行时好像该部分代码不存在(它只运行一次)
3) 我尝试以某种方式将作业调度器与警报管理器结合起来,以使作业调度器管理网络需求,而警报管理器管理作业的周期性方面。但我没有实现这一点,我觉得这不是正确的做法。
如果有人能指导我找到更好的方法来处理这个问题,我将不胜感激,因为我已经花了很长时间试图解决这个问题。
【问题讨论】:
【参考方案1】:我会推荐一个名为 android-job 的 Evernote 库。它处理了在 21+、Firebase/GcmNetworkManager 或 AlarmManager 以及各种其他事情上选择 JobScheduler 的所有复杂性。它具有一组非常强大的功能,应该适合您的用例。
例如:
int jobId = new JobRequest.Builder(DemoSyncJob.TAG)
.setExecutionWindow(30_000L, 40_000L)
.setBackoffCriteria(5_000L, JobRequest.BackoffPolicy.EXPONENTIAL)
.setRequiresCharging(true)
.setRequiresDeviceIdle(false)
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
.setExtras(extras)
.setRequirementsEnforced(true)
.setPersisted(true)
.setUpdateCurrent(true)
.build()
.schedule();
【讨论】:
帖子说“JobRequest.Builder 类有许多额外的选项,例如,您可以指定所需的网络连接、定期执行作业、通过捆绑传递一些额外内容、重启后恢复作业或在准确的时间运行这项工作。”这应该完全满足我的需要。非常感谢,我已经被这个问题困扰了好几天了。 @James McCracken,我的工作安排有问题,请帮帮我。 ***.com/questions/44063206/…以上是关于使用作业调度程序管理定期任务?的主要内容,如果未能解决你的问题,请参考以下文章