O JobScheduler periódico não respeita as restrições
Usando oJobScheduler
, Montei um simplesJobService
do seguinte modo:
@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;
}
}
Eu então configuro oJobService
para ser periódico (a cada minuto) e exigir rede e carregamento não medidos:
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());
oonStartJob
do meuSimpleJobService
está sendo chamado independentemente de meu dispositivo estar carregando ou de uma rede não-medida.
A documentação parasetPeriodic(long)
diz que não pode ser usado em conjunto comsetOverrideDeadline(long)
(e eu não sou assim mesmo), mas estou surpreso quejobParameters.isOverrideDeadlineExpired()
noonStartJob
é sempretrue
com esta configuração.
Estou faltando alguma coisa aqui?
Isso me parece um bug do Android, mas estou surpreso por não encontrar outras pessoas que relatam esse problema.
Esse comportamento foi observado no Android 6.0.1