Да, у резервных заданий нет сроков переопределения, связанных с ними, и это включает в себя неявный крайний срок переопределения, установленный периодическими заданиями.
ользованиемJobScheduler
Я установил простойJobService
следующее:
@TargetApi(21)
public class SimpleJobService extends JobService {
private static final String TAG = "SimpleJobService";
@Override
public boolean onStartJob(JobParameters jobParameters) {
if (jobParameters.isOverrideDeadlineExpired()) {
Log.d(TAG, "This shouldn't happen");
Toast.makeText(this, "This shouldn't happen", Toast.LENGTH_LONG).show();
}
jobFinished(jobParameters, false);
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
return true;
}
}
Затем я настраиваюJobService
быть периодическим (каждую минуту) и требовать безлимитной сети и тарификации:
ComponentName jobServiceComponent = new ComponentName(this, SimpleJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(2, jobServiceComponent);
builder.setPersisted(true);
builder.setPeriodic(60000);
builder.setRequiresCharging(true);
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());
onStartJob
из моегоSimpleJobService
вызывается независимо от того, заряжается ли мое устройство или нет.
Документация дляsetPeriodic(long)
говорит, что его нельзя использовать вместе сsetOverrideDeadline(long)
(и я не в любом случае), но я удивлен, чтоjobParameters.isOverrideDeadlineExpired()
вonStartJob
когда-либоtrue
с этой настройкой.
Я что-то здесь упускаю?
Для меня это похоже на ошибку Android, но я удивлен, что не смог найти других людей, сообщающих об этой проблеме.
Такое поведение наблюдалось на Android 6.0.1