@Override public Intent getIntent() { return mJobWork.getIntent(); }
public static JobWorkItem buildWorkItem(int workIndex, String url) { Intent i=new Intent(); i.setData(Uri.parse(url)); i.putExtra(EXTRA_WORK_INDEX, workIndex); return(new JobWorkItem(i)); }
@Override public int enqueue(android.app.job.JobInfo job, android.app.job.JobWorkItem work) throws android.os.RemoteException { android.os.Parcel _data = android.os.Parcel.obtain(); android.os.Parcel _reply = android.os.Parcel.obtain(); int _result; try { _data.writeInterfaceToken(DESCRIPTOR); if ((job != null)) { _data.writeInt(1); job.writeToParcel(_data, 0); } else { _data.writeInt(0); } if ((work != null)) { _data.writeInt(1); work.writeToParcel(_data, 0); } else { _data.writeInt(0); } mRemote.transact(Stub.TRANSACTION_enqueue, _data, _reply, 0); _reply.readException(); _result = _reply.readInt(); } finally { _reply.recycle(); _data.recycle(); } return _result; }
@Override public Intent getIntent() { return mJobWork.getIntent(); }
@Override void enqueueWork(Intent work) { if (DEBUG) Log.d(TAG, "Enqueueing work: " + work); mJobScheduler.enqueue(mJobInfo, new JobWorkItem(work)); } }
private void scheduleWork(final JobParameters params) { if (!threadPool.isShutdown()) { JobWorkItem item; while ((item=params.dequeueWork())!=null) { final int workIndex=item.getIntent().getIntExtra(EXTRA_WORK_INDEX, -1); final String url=item.getIntent().getData().toString(); final JobWorkItem itemToDo=item; threadPool.execute(new Runnable() { @Override public void run() { download(workIndex, url); params.completeWork(itemToDo); scheduleWork(params); } }); } } }
@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); }
/** * Dequeue some work. */ @Override public TinkerJobIntentService.GenericWorkItem dequeueWork() { JobWorkItem work; synchronized (mLock) { if (mParams == null) { return null; } try { work = mParams.dequeueWork(); } catch (Throwable thr) { Log.w(TAG, "exception occurred.", thr); work = null; } } if (work != null) { work.getIntent().setExtrasClassLoader(mService.getClassLoader()); return new WrapperWorkItem(work); } else { return null; } } }
@Test @Config(minSdk = O) public void enqueue_fail() { shadowOf(jobScheduler).failOnJob(99); 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_FAILURE); } }
/** * Dequeue some work. */ @Override public JobIntentService.GenericWorkItem dequeueWork() { JobWorkItem work = null; synchronized (mLock) { if (mParams == null) { return null; } try { work = mParams.dequeueWork(); } catch (SecurityException se) { //ignore se.printStackTrace(); } } if (work != null) { work.getIntent().setExtrasClassLoader(mService.getClassLoader()); return new WrapperWorkItem(work); } else { return null; } } }
@Override public void onClick(View view) { //let's create 3 fake work items and enqueue them. JobWorkItem item; Intent i; //first item i = new Intent(); i.putExtra("Key1", "first item"); //fake data too. item = new JobWorkItem(i); jobScheduler.enqueue(job,item); //second item i = new Intent(); i.putExtra("Key1", "Second item"); //fake data too. item = new JobWorkItem(i); jobScheduler.enqueue(job,item); //first item i = new Intent(); i.putExtra("Key1", "Third item"); //fake data too. item = new JobWorkItem(i); jobScheduler.enqueue(job,item); } });
@Override public Intent getIntent() { return mJobWork.getIntent(); }
@Override public Intent getIntent() { return mJobWork.getIntent(); }
@Override protected Void doInBackground(Void... params) { boolean cancelled; JobWorkItem work; /** * Iterate over available work. Once dequeueWork() returns null, the * job's work queue is empty and the job has stopped, so we can let this * async task complete. */ while (!(cancelled=isCancelled()) && (work=mParams.dequeueWork()) != null) { String txt = work.getIntent().getStringExtra("Key1"); Log.i("JobWorkService", "Processing work: " + work + ", msg: " + txt); showNotification(txt); // Process work here... we'll pretend by sleeping. try { Thread.sleep(5000); } catch (InterruptedException e) { } hideNotification(); // Tell system we have finished processing the work. Log.i("JobWorkService", "Done with: " + work); mParams.completeWork(work); } if (cancelled) { Log.i("JobWorkService", "CANCELLED!"); } return null; } }
/** * Dequeue some work. */ @Override public JobIntentService.GenericWorkItem dequeueWork() { JobWorkItem work = null; synchronized (mLock) { if (mParams == null) { return null; } try { work = mParams.dequeueWork(); } catch (SecurityException se) { //ignore se.printStackTrace(); } } if (work != null) { work.getIntent().setExtrasClassLoader(mService.getClassLoader()); return new WrapperWorkItem(work); } else { return null; } } }
/** * Dequeue some work. */ @Override public JobIntentService.GenericWorkItem dequeueWork() { JobWorkItem work = null; synchronized (mLock) { if (mParams == null) { return null; } try { work = mParams.dequeueWork(); } catch (SecurityException se) { //ignore se.printStackTrace(); } } if (work != null) { work.getIntent().setExtrasClassLoader(mService.getClassLoader()); return new WrapperWorkItem(work); } else { return null; } } }