@Override void enqueueWork(Intent work) { if (DEBUG) Log.d(TAG, "Enqueueing work: " + work); mJobScheduler.enqueue(mJobInfo, new JobWorkItem(work)); } }
@Override public void complete() { synchronized (mLock) { if (mParams != null) { mParams.completeWork(mJobWork); } } } }
@Override public Intent getIntent() { return mJobWork.getIntent(); }
static void schedule(Context ctxt) { ComponentName cn= new ComponentName(ctxt, DemoJobService.class); JobInfo.TriggerContentUri trigger= new JobInfo.TriggerContentUri(CONTENT_URI, JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS); JobInfo.Builder b= new JobInfo.Builder(ME_MYSELF_AND_I, cn) .addTriggerContentUri(trigger); JobScheduler jobScheduler= (JobScheduler)ctxt.getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(b.build()); }
public static JobInfo enqueueWork(Context ctxt, JobInfo jobInfo, List<JobWorkItem> work) { JobScheduler jobScheduler=ctxt.getSystemService(JobScheduler.class); if (jobInfo==null) { ComponentName cn=new ComponentName(ctxt, WorkService.class); jobInfo=new JobInfo.Builder(JOB_ID, cn) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .build(); } for (JobWorkItem item : work) { jobScheduler.enqueue(jobInfo, item); } return(jobInfo); }
@Test @Config(minSdk = O) public void enqueue_success() { int result = jobScheduler.enqueue( new JobInfo.Builder(99, new ComponentName(context, "component_class_name")) .setPeriodic(1000) .build(), new JobWorkItem(new Intent())); assertThat(result).isEqualTo(JobScheduler.RESULT_SUCCESS); }
JobWorkEnqueuer(Context context, ComponentName cn, int jobId) { super(context, cn); ensureJobId(jobId); JobInfo.Builder b = new JobInfo.Builder(jobId, mComponentName); mJobInfo = b.setOverrideDeadline(0).build(); mJobScheduler = (JobScheduler) context.getApplicationContext().getSystemService( Context.JOB_SCHEDULER_SERVICE); }
@Override public boolean schedule(Requirements requirements, String servicePackage, String serviceAction) { JobInfo jobInfo = buildJobInfo(jobId, jobServiceComponentName, requirements, serviceAction, servicePackage); int result = jobScheduler.schedule(jobInfo); logd("Scheduling job: " + jobId + " result: " + result); return result == JobScheduler.RESULT_SUCCESS; }
protected JobInfo.Builder createBuilderOneOff(JobInfo.Builder builder, long startMs, long endMs) { return builder.setMinimumLatency(startMs).setOverrideDeadline(endMs); }
@Override protected JobInfo.Builder createBuilderPeriodic(JobInfo.Builder builder, long intervalMs, long flexMs) { return builder.setPeriodic(intervalMs, flexMs); }
@Override public boolean cancel() { logd("Canceling job: " + jobId); jobScheduler.cancel(jobId); return true; }
/** * Make JobScheduler happy. */ private void emptyCallback(IJobCallback callback, int jobId) { try { callback.acknowledgeStartMessage(jobId, false); callback.jobFinished(jobId, false); } catch (RemoteException e) { e.printStackTrace(); } }
@Override public IBinder onBind(Intent intent) { return mService.asBinder(); }
@Override public void acknowledgeStopMessage(int jobId, boolean reschedule) throws RemoteException { clientCallback.acknowledgeStopMessage(jobId, reschedule); }
@Override public void jobFinished(int jobId, boolean reschedule) throws RemoteException { clientCallback.jobFinished(jobId, reschedule); }
@Override public void acknowledgeStartMessage(int jobId, boolean ongoing) throws RemoteException { clientCallback.acknowledgeStartMessage(jobId, ongoing); }
@TargetApi(Build.VERSION_CODES.O) private Bundle getTransientBundle(JobParameters params) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return params.getTransientExtras(); } else { return Bundle.EMPTY; } } }
protected JobInfo.Builder createBuilderPeriodic(JobInfo.Builder builder, long intervalMs, long flexMs) { return builder.setPeriodic(intervalMs); }
@Override public void run() { download(workIndex, url); params.completeWork(itemToDo); scheduleWork(params); } });
@Override public Intent getIntent() { return mJobWork.getIntent(); }