私はJobServiceを構築しています。この JobService は、5 秒ごとにサービスを開始する必要があります。ただし、サービスが既に実行されている場合は、開始しないでください。これが私の JobService です。
public class BleJobService extends JobService {
JobParameters params;
DoItTask doIt;
@Override
public boolean onStartJob(JobParameters jobParameters) {
this.params = jobParameters;
Log.d("TestService", "Work to be called from here");
doIt = new DoItTask();
doIt.execute();
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
Log.d("TestService", "System calling to stop the job here");
if (doIt != null)
doIt.cancel(true);
return false;
}
private class DoItTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPostExecute(Void aVoid) {
Log.d("DoItTask", "Clean up the task here and call jobFinished...");
jobFinished(params, true);
super.onPostExecute(aVoid);
}
@Override
protected Void doInBackground(Void... params) {
Log.d("DoItTask", "Working here...");
startService(new Intent(getApplicationContext(), BlePowerService.class));
return null;
}
}
}
私のアクティビティでは、これは JobService を開始するコードです。
JobInfo jobInfo;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
jobInfo = new JobInfo.Builder(1, componentName)
.setMinimumLatency(5000)
/*.setExtras(bundle)*/.build();
} else {
jobInfo = new JobInfo.Builder(1, componentName)
.setPeriodic(5000)
/*.setExtras(bundle)*/.build();
}
jobScheduler.schedule(jobInfo);
ただし、サービスが 2 回開始され、ジョブがタスクを実行しないため、このコードは機能しません。