Jobscheduler API android L.

时间:2014-11-30 00:37:43

标签: android android-5.0-lollipop android-jobscheduler

我正在制作一个使用jobscheduler API的应用程序。 我想定期运行服务,并在设备充电时。这是代码。

JobInfo.Builder builder = new JobInfo.Builder(kJobId++, mServiceComponent);
                    builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
                    builder.setPeriodic(3000);
                    builder.setRequiresCharging(true);
                    mTestService.scheduleJob(builder.build());

现在,当我运行此设备并拔下设备时,该服务仍会在3秒后运行。设置setRequiresCharging没有效果。

当我注释掉builder.setPeriodic(3000)时,它的效果非常好。我不确定我哪里出错了。

1 个答案:

答案 0 :(得分:4)

为了在内部识别每个作业,当新作业落在调度程序上时,框架会创建一个新的JobStatusJobStatus做的第一件事就是检查并查看您的作业是否有定期更新间隔。如果是,则使用periodic update interval确定将来必须运行作业的最新点,换句话说,if it has a deadline constraint.

要考虑工作ready to be executed的标准之一,即所有约束都已满足作业的截止日期已过期。有关详细信息,请参阅JobStatus.isReady

JobSchedulerService添加了几个StateControllers,用于跟踪作业何时运行以及何时必须停止作业。其中一个控制器是TimeController,其中:

  

为下一个过期作业设置闹钟,并确定是否为   工作的最小延迟已经满足

To determine if a new alarm should be scheduledTimeController检查您的作业是否有任何时间延迟或截止日期限制,如果您设置了定期更新间隔,则似乎会给出所有作业。

我希望这可以帮助您至少理解为什么尽管您的电池限制,您的工作仍在继续安排。但我现在还没有一个解决方案可以直接解决这个问题。