我正在创建一个使用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)时,它完全正常.我不确定我哪里出错了.
解决方法:
为了在内部识别每个作业,当新作业落在调度程序上时,框架会创建一个新的JobStatus. JobStatus做的第一件事就是检查你的工作是否有定期的更新间隔.如果是,它使用periodic update interval来确定将来必须运行作业的最新点,或者换句话说,if it has a deadline constraint.
工作被视为ready to be executed的标准之一,它已满足所有约束条件或工作截止日期已过期.有关更多信息,请参见JobStatus.isReady.
JobSchedulerService添加了几个用于跟踪作业何时运行以及何时必须停止的StateControllers.其中一个控制器是TimeController,其中:
sets an alarm for the next expiring job, and determines whether a
job’s minimum delay has been satisfied
To determine if a new alarm should be scheduled,TimeController检查您的作业是否有任何时间延迟或截止时间限制,如果您设置了定期更新间隔,则似乎会给出所有作业.
我希望这可以帮助你至少理解为什么你的工作继续被安排,尽管你的电池限制.但是我目前还没有一个可以直接解决这个问题的解决方案.
标签:android,android-5-0-lollipop,android-jobscheduler
来源: https://codeday.me/bug/20190624/1276462.html