@Override public boolean onStartJob(JobParameters jobParameters) { String jobId = String.valueOf(jobParameters.getJobId()); SyncDelegate syncDelegate = createSyncDelegate(); mSyncDelegates.put(jobId, syncDelegate); syncDelegate.subscribe(token -> { if (TextUtils.equals(jobId, token)) { jobFinished(jobParameters, false); mSyncDelegates.remove(jobId); } }); syncDelegate.performSync(new SyncDelegate.Job(jobParameters.getExtras())); return true; }
@Override public void complete() { synchronized (mLock) { if (mParams != null) { mParams.completeWork(mJobWork); } } } }
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); } }); } } }
@Override public boolean onStopJob(JobParameters jobParameters) { String key = String.valueOf(jobParameters.getJobId()); if (mSyncDelegates.containsKey(key)) { mSyncDelegates.remove(key).stopSync(); } return true; }
@Override public boolean onStartJob(JobParameters params) { PersistableBundle pb=params.getExtras(); if (pb.getBoolean(MainActivity.KEY_DOWNLOAD, false)) { job=new DownloadThread(params); job.start(); return(true); } Log.d(getClass().getSimpleName(), "job invoked"); return(false); }
private JobParameters toLocalParameters(android.app.job.JobParameters params, Bundle transientExtras) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return new JobParameters( params.getJobId(), new PersistableBundle(params.getExtras()), params.getTransientExtras(), params.isOverrideDeadlineExpired(), params.getTriggeredContentUris(), params.getTriggeredContentAuthorities()); } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return new JobParameters( params.getJobId(), new PersistableBundle(params.getExtras()), transientExtras, params.isOverrideDeadlineExpired(), params.getTriggeredContentUris(), params.getTriggeredContentAuthorities()); } else { return new JobParameters( params.getJobId(), new PersistableBundle(params.getExtras()), transientExtras, params.isOverrideDeadlineExpired(), null, null); } } }
@Override public boolean onStartJob(final JobParameters params) { if (params.getJobId() == FIRST_RUN_JOB_ID && params.isOverrideDeadlineExpired()) { Log.d(TAG, "override deadline expired"); return false; } task = new RemoteVerifyTask(params); task.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); return true; }
@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; } }
@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; } } }
@Override public void stopJob(JobParameters jobParams) throws RemoteException { int jobId = jobParams.getJobId(); synchronized (mJobSessions) { JobSession session = mJobSessions.get(jobId); if (session != null) { session.stopSession(); } } } };
@Override public boolean onStartJob(JobParameters params) { PersistableBundle pb=params.getExtras(); if (pb.getBoolean(MainActivity.KEY_DOWNLOAD, false)) { job=new DownloadThread(params); job.start(); return(true); } Log.d(getClass().getSimpleName(), "job invoked"); return(false); }
@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; } } }
boolean onStartJob(JobParameters params) { SchedulerConstraint constraint; try { constraint = fromBundle(params.getExtras()); } catch (Exception e) { JqLog.e(e, "bad bundle from framework job scheduler start callback."); return false; } JqLog.d("[FW Scheduler] start job %s %d", constraint, params.getJobId()); constraint.setData(params); return start(constraint); }
@Override public boolean onStopJob(JobParameters params) { Job job = JobManager.create(this).getJob(params.getJobId()); if (job != null) { job.cancel(); CAT.d("Called onStopJob for %s", job); } else { CAT.d("Called onStopJob, job %d not found", params.getJobId()); } // do not reschedule return false; }
@Override public boolean onStartJob(JobParameters params) { String className = params.getExtras().getString(RestartingAdministrator.EXTRA_LAST_ACTIVITY); if (className != null) { try { //noinspection unchecked Class<? extends Activity> activityClass = (Class<? extends Activity>) Class.forName(className); final Intent intent = new Intent(this, activityClass); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } catch (ClassNotFoundException e) { ACRA.log.w(ACRA.LOG_TAG, "Unable to find activity class" + className); } } return false; }
@Override public void run() { download(workIndex, url); params.completeWork(itemToDo); scheduleWork(params); } });
/** * 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; } } }
@Override public boolean onStartJob(JobParameters jobParameters) { new WidgetHelper(this).refresh(jobParameters.getJobId()); jobFinished(jobParameters, false); // if we're able to start job means we have network conn return true; }
boolean onStopJob(JobParameters params) { SchedulerConstraint constraint; try { constraint = fromBundle(params.getExtras()); } catch (Exception e) { JqLog.e(e, "bad bundle from job scheduler stop callback"); return false; } return stop(constraint); } }