Я использую JobScheduler для запуска задания каждые 15 минут.Но это не работает, как ожидалось.Здесь я приложил свой код.
public class WorkScheduler extends JobService {
private static final String TAG = "Jobschedulerexample";
private boolean jobCanceled = false;
private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
@Override
public boolean onStartJob(JobParameters jobParameters) {
Log.d(TAG,"Started at ==> "+ sdf.format(new Date()));
Log.d(TAG,"Job Started");
doBackgroundWork(jobParameters);
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
Log.d(TAG, "Job cancelled before completion");
jobCanceled = true;
return true;
}
private void doBackgroundWork(final JobParameters params) {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
Log.d(TAG, "run: " + i);
if (jobCanceled) {
return;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Log.d(TAG, "Job finished");
Log.d(TAG,"Ended at ==> "+ sdf.format(new Date()));
jobFinished(params, true);
}
}).start();
}
}
Мой служебный класс для Службы заданий
public class WorkSchedulerUtility {
private static final int JOB_ID = 123;
private static WorkSchedulerUtility mInstance;
private final int REFRESH_INTERVAL = 15 * 60 * 1000;
private WorkSchedulerUtility(){
}
public static WorkSchedulerUtility getInstance(){
if(mInstance == null){
mInstance = new WorkSchedulerUtility();
}
return mInstance;
}
private static final String TAG = "Jobschedulerexample";
public void scheduleJob(Context context) {
ComponentName componentName = new ComponentName(context, WorkScheduler.class);
/* JobInfo info = new JobInfo.Builder(JOB_ID, componentName)
.setPersisted(true)
.setPeriodic(REFRESH_INTERVAL)
.build();*/
JobInfo info = new JobInfo.Builder(JOB_ID, componentName)
.setPersisted(true)
.setBackoffCriteria(REFRESH_INTERVAL, JobInfo.BACKOFF_POLICY_LINEAR)
.setMinimumLatency(1000 * 6)
.build();
JobScheduler scheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE);
int resultCode = scheduler.schedule(info);
if (resultCode == JobScheduler.RESULT_SUCCESS) {
Log.d(TAG, "Job scheduled");
} else {
Log.d(TAG, "Job scheduling failed");
}
}
public void cancelJob(Context context) {
JobScheduler scheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE);
scheduler.cancel(123);
Log.d(TAG, "Job cancelled");
}
}
Я планировал запускать задание каждые 15 минут.Но это не начало работы каждые 15 минут.Я прикреплю вывод.
Начинается с ==> 15:10:49 Завершено с ==> 15:10:59 Начато с ==> 15:25:59 Завершено с ==>15:26:09 Начинается с ==> 15:56:10 Завершается на ==> 15:56:20 Начинается с ==> 16:41:44 Завершается на ==> 16: 41: 54
Я не знаю, почему это не работает каждые 15 минут.А также я хочу начать работу в определенное время.Например, каждый день в 8 часов.Как добиться этого с помощью JobSceduler.