4

我正在制作一个使用 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) 时,它工作得非常好。我不确定我哪里出错了。

4

1 回答 1

4

为了在内部识别每个作业,框架会JobStatus在新作业登陆调度程序时创建一个新作业。首先要做的事情之一JobStatus是检查您的作业是否具有定期更新间隔。如果是,它使用周期性更新间隔来确定将来必须运行作业的最新点,或者换句话说,它是否具有截止日期约束。

作业被视为准备好执行的标准之一,即所有约束均已满足作业的截止日期已过期。有关JobStatus.isReady更多信息,请参阅。

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

为下一个即将到期的作业设置警报,并确定是否已满足作业的最小延迟

要确定是否应该安排新警报TimeController请检查您的作业是否有任何时间延迟或截止日期限制,如果您设置定期更新间隔,所有作业似乎都已给出。

我希望这至少可以帮助您理解为什么尽管您的电池受限,您的工作仍会继续被安排。但我目前没有可以直接解决此问题的解决方案。

于 2014-11-30T02:21:24.953 回答