/** * @return The tag for this {@link Job} which was passed in the constructor of the {@link JobRequest.Builder}. * @see JobRequest#getTag() */ public String getTag() { return mRequest.getTag(); }
public synchronized Future<Job.Result> execute(@NonNull Context context, @NonNull JobRequest request, @Nullable Job job, @NonNull Bundle transientExtras) { mStartingRequests.remove(request); if (job == null) { CAT.w("JobCreator returned null for tag %s", request.getTag()); return null; } if (job.isFinished()) { throw new IllegalStateException(String.format(Locale.ENGLISH, "Job for tag %s was already run, a creator should always create a new Job instance", request.getTag())); } job.setContext(context).setRequest(request, transientExtras); CAT.i("Executing %s, context %s", request, context.getClass().getSimpleName()); mJobs.put(request.getJobId(), job); return JobConfig.getExecutorService().submit(new JobCallable(job)); }
@Override public String toString() { return "request{id=" + getJobId() + ", tag=" + getTag() + ", transient=" + isTransient() + '}'; }
@Test public void verifyScheduledTwiceOverridesExisting() { long time = 1L; DailyJob.schedule(DummyJobs.createBuilder(DummyJobs.SuccessJob.class), time, time); DailyJob.schedule(DummyJobs.createBuilder(DummyJobs.SuccessJob.class), time, time); Set<JobRequest> requests = manager().getAllJobRequests(); assertThat(requests).hasSize(1); assertThat(requests.iterator().next().getTag()).isEqualTo(DummyJobs.SuccessJob.TAG); }
job = mJobManager.getJobCreatorHolder().createJob(request.getTag());
@Test public void verifyScheduledImmediatelyIsNotOverridden() { long time = 1L; DailyJob.startNowOnce(DummyJobs.createBuilder(DummyJobs.SuccessJob.class)); DailyJob.schedule(DummyJobs.createBuilder(DummyJobs.SuccessJob.class), time, time); Set<JobRequest> requests = manager().getAllJobRequests(); assertThat(requests).hasSize(2); for (JobRequest request : requests) { assertThat(request.getTag()).isEqualTo(DummyJobs.SuccessJob.TAG); } }
@Test public void testFlex() { JobConfig.forceApi(JobApi.V_14); long interval = JobRequest.MIN_INTERVAL * 5; long flex = JobRequest.MIN_FLEX * 5; JobRequest request = getBuilder() .setPeriodic(interval, flex) .build(); JobManager.instance().schedule(request); assertThat(request.getJobId()).isGreaterThan(0); assertThat(request.getTag()).isEqualTo(DummyJobs.SuccessJob.TAG); assertThat(request.getIntervalMs()).isEqualTo(interval); assertThat(request.getFlexMs()).isEqualTo(flex); assertThat(request.isPeriodic()).isTrue(); assertThat(request.isFlexSupport()).isTrue(); }
@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(); }
cancelAllForTag(request.getTag());
/** * @return The tag for this {@link Job} which was passed in the constructor of the {@link JobRequest.Builder}. * @see JobRequest#getTag() */ public String getTag() { return mRequest.getTag(); }
public synchronized Future<Job.Result> execute(@NonNull Context context, @NonNull JobRequest request, @Nullable Job job, @NonNull Bundle transientExtras) { mStartingRequests.remove(request); if (job == null) { CAT.w("JobCreator returned null for tag %s", request.getTag()); return null; } if (job.isFinished()) { throw new IllegalStateException(String.format(Locale.ENGLISH, "Job for tag %s was already run, a creator should always create a new Job instance", request.getTag())); } job.setContext(context).setRequest(request, transientExtras); CAT.i("Executing %s, context %s", request, context.getClass().getSimpleName()); mJobs.put(request.getJobId(), job); return JobConfig.getExecutorService().submit(new JobCallable(job)); }
@Override public String toString() { return "request{id=" + getJobId() + ", tag=" + getTag() + ", transient=" + isTransient() + '}'; }
job = mJobManager.getJobCreatorHolder().createJob(request.getTag());
cancelAllForTag(request.getTag());