I want to start a JobScheduler at a specific time everyday, and finish it after 3 hours.
I have the part of triggering the job every 20 min, and for 3 hours, but in JobInfo.Builder class there's no option for starting the job at an exact time.
Going over the JobInfo.Builder class overview, there's nothing there that sets the time for starting a JobScheduler.
Obviously, i don't want to run it for the whole day, and check that the time matches, this will drain more battery than needed, and is bad programing.
I was thinking of making an alarm to run at the time i specify and would trigger this job, but this seems to be a bit overkill.
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());
If you have any other solution to the issue, beside AlarmManger that triggers this JobScheduler, will be much appreciated.
adding setMinimumLatency on jobInfo with the deference of the current time and the target time solves this issue.
for the example above the scheduler will work after 60 secs.
I achieved it in the following way (without
AlarmManager
), created a new Job (with a uniqueJOB_ID
obviously), and told theJobScheduler
to schedule it for sometime in the future usingsetOverrideDeadline()
.Here's a snippet which might be helpful:
Make sure to calculate the correct time offset at which you want to schedule the task and also remove any existing Job IDs from the
JobScheduler
.