【问题标题】:manage periodic tasks with job Scheduler?使用作业调度程序管理定期任务?
【发布时间】:2017-07-15 20:19:33
【问题描述】:

基本上我想做的是,当有互联网连接时,然后从传感器收集值并安排下一次从传感器收集数据的时间,比如说 5 分钟(这个间隔取决于当前的活动:步行、跑步。 ..)。 5分钟后,系统会检查是否有网络连接:

-如果有则重复循环(收集,发送到服务器并安排下一次数据收集)

*如果没有,则下一次收集数据的时间安排在下一次有可用的互联网连接时

我尝试使用什么:

1) 我想为 api=21 使用作业调度程序。 对于作业调度程序,我无法同时设置需求可用网络并使作业定期进行,因为这样无论是否满足要求,作业都会在周期结束后运行。

2)我试图让作业服务在当前作业结束后设置下一个作业,但应用程序运行时好像该部分代码不存在(它只运行一次)

3) 我尝试以某种方式将作业调度器与警报管理器结合起来,以使作业调度器管理网络需求,而警报管理器管理作业的周期性方面。但我没有实现这一点,我觉得这不是正确的做法。

如果有人能指导我找到更好的方法来处理这个问题,我将不胜感激,因为我已经花了很长时间试图解决这个问题。

【问题讨论】:

    标签: android alarmmanager android-alarms job-scheduling android-api-levels


    【解决方案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,我的工作安排有问题,请帮帮我。 stackoverflow.com/questions/44063206/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2014-07-30
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多