我想在每天的特定时间开始JobScheduler,并在3小时后完成。
我有20分钟和3小时触发工作的部分,但在JobInfo.Builder课程中,没有选择在准确时间开始工作。
通过JobInfo.Builder课程概述,没有任何内容可以设置启动JobScheduler的时间。
显然,我不想整天运行它,并检查时间是否匹配,这将耗尽更多的电池而不是需要,并且编程很糟糕。
我正在考虑在我指定的时间发出警报并触发这项工作,但这似乎有点矫枉过正。
JobInfo.Builder builder = new JobInfo.Builder(NIGHT_SYNC_JOB_ID,
new ComponentName(context, NightSyncDataJobService.class));
//Job starts at 11pm, and ends at 2am. Running every 20 minutes.
builder.setPersisted(true); //Job scheduled to work after reboot
builder.setPeriodic(Consts.ONE_MINUTE * 20);
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());
如果您有任何其他问题的解决方案,那么触发此JobScheduler的AlarmManger旁边将非常感激。
答案 0 :(得分:6)
我通过以下方式实现了它(没有AlarmManager
),创建了一个新的Job(显然有一个唯一的JOB_ID
),并告诉JobScheduler
在某个时间安排它未来使用setOverrideDeadline()
。
这是一个可能有帮助的片段:
private JobInfo getJobInfoForFutureTask(Context context,
long timeTillFutureJob) {
ComponentName serviceComponent = new ComponentName(context, SchedulerService.class);
return new JobInfo.Builder(FUTURE_JOB_ID, serviceComponent)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
.setOverrideDeadline(timeTillFutureJob)
.setRequiresDeviceIdle(false)
.setRequiresCharging(false)
.setPersisted(true)
.build();
}
确保计算您要安排任务的正确时间偏移,并从JobScheduler
中删除任何现有的职位ID。
答案 1 :(得分:1)
在jobInfo上添加setMinimumLatency并考虑当前时间和目标时间,即可解决此问题。
tf.mul
对于上面的示例,调度程序将在60秒后工作。