/** * @return {@code true} if this job was scheduled at an exact time by calling {@link JobRequest.Builder#setExact(long)}. * @see JobRequest#isExact() */ public boolean isExact() { return mRequest.isExact(); }
protected PendingIntent getPendingIntent(JobRequest request, int flags) { return getPendingIntent(request.getJobId(), request.isExact(), request.getTransientExtras(), flags); }
Set<JobRequest> requests = new HashSet<>(manager.getAllJobRequestsForTag(builder.mTag)); for (JobRequest request : requests) { if (!request.isExact() || request.getStartMs() != JobRequest.START_NOW) { manager.cancel(request.getJobId()); .build(); if (newJob && (request.isExact() || request.isPeriodic() || request.isTransient())) { throw new IllegalArgumentException("Daily jobs cannot be exact, periodic or transient");
private void logScheduled(JobRequest request) { mCat.d("Scheduled alarm, %s, delay %s (from now), exact %b, reschedule count %d", request, JobUtil.timeToString(Common.getAverageDelayMs(request)), request.isExact(), Common.getRescheduleCount(request)); }
@Test public void verifyDailyJobIsNotExact() { long time = 1L; int jobId = DailyJob.schedule(DummyJobs.createBuilder(DummyJobs.SuccessJob.class), time, time); JobRequest request = manager().getJobRequest(jobId); assertThat(request).isNotNull(); assertThat(request.isExact()).isFalse(); }
if (request.isExact()) { exact++; } else if (request.isPeriodic()) {
@Override public void plantOneOff(JobRequest request) { PendingIntent pendingIntent = getPendingIntent(request, false); AlarmManager alarmManager = getAlarmManager(); if (alarmManager == null) { return; } try { if (request.isExact()) { if (request.getStartMs() == 1 && request.getFailureCount() <= 0) { // this job should start immediately PlatformAlarmService.start(mContext, request.getJobId(), request.getTransientExtras()); } else { plantOneOffExact(request, alarmManager, pendingIntent); } } else { plantOneOffInexact(request, alarmManager, pendingIntent); } } catch (Exception e) { // https://gist.github.com/vRallev/621b0b76a14ddde8691c mCat.e(e); } }
@Test public void testPeriodic() { long interval = JobRequest.MIN_INTERVAL * 5; JobRequest request = getBuilder() .setPeriodic(interval) .setExtras(new PersistableBundleCompat()) .build(); assertThat(request.getJobId()).isGreaterThan(0); assertThat(request.getTag()).isEqualTo(DummyJobs.SuccessJob.TAG); assertThat(request.getIntervalMs()).isEqualTo(interval); assertThat(request.getFlexMs()).isEqualTo(interval); assertThat(request.isPeriodic()).isTrue(); assertThat(request.isFlexSupport()).isFalse(); assertThat(request.getStartMs()).isNegative(); assertThat(request.getEndMs()).isNegative(); assertThat(request.getBackoffMs()).isEqualTo(JobRequest.DEFAULT_BACKOFF_MS); assertThat(request.getBackoffPolicy()).isEqualTo(JobRequest.DEFAULT_BACKOFF_POLICY); assertThat(request.getExtras()).isNotNull(); assertThat(request.isExact()).isFalse(); assertThat(request.requiredNetworkType()).isEqualTo(JobRequest.DEFAULT_NETWORK_TYPE); assertThat(request.requirementsEnforced()).isFalse(); assertThat(request.requiresCharging()).isFalse(); assertThat(request.requiresDeviceIdle()).isFalse(); }
/** * @return {@code true} if this job was scheduled at an exact time by calling {@link JobRequest.Builder#setExact(long)}. * @see JobRequest#isExact() */ public boolean isExact() { return mRequest.isExact(); }
protected PendingIntent getPendingIntent(JobRequest request, int flags) { return getPendingIntent(request.getJobId(), request.isExact(), request.getTransientExtras(), flags); }
private void logScheduled(JobRequest request) { mCat.d("Scheduled alarm, %s, delay %s (from now), exact %b, reschedule count %d", request, JobUtil.timeToString(Common.getAverageDelayMs(request)), request.isExact(), Common.getRescheduleCount(request)); }
Set<JobRequest> requests = new HashSet<>(manager.getAllJobRequestsForTag(builder.mTag)); for (JobRequest request : requests) { if (!request.isExact() || request.getStartMs() != JobRequest.START_NOW) { manager.cancel(request.getJobId()); .build(); if (newJob && (request.isExact() || request.isPeriodic() || request.isTransient())) { throw new IllegalArgumentException("Daily jobs cannot be exact, periodic or transient");
@Override public void plantOneOff(JobRequest request) { PendingIntent pendingIntent = getPendingIntent(request, false); AlarmManager alarmManager = getAlarmManager(); if (alarmManager == null) { return; } try { if (request.isExact()) { if (request.getStartMs() == 1 && request.getFailureCount() <= 0) { // this job should start immediately PlatformAlarmService.start(mContext, request.getJobId(), request.getTransientExtras()); } else { plantOneOffExact(request, alarmManager, pendingIntent); } } else { plantOneOffInexact(request, alarmManager, pendingIntent); } } catch (Exception e) { // https://gist.github.com/vRallev/621b0b76a14ddde8691c mCat.e(e); } }