Android JobScheduler работает слишком часто при использовании setPeriodic()
Я заметил, что мой запланированный JobScheduler выполняет работу слишком часто. Я установил его для ежедневного выполнения, и он требует простоя, быть на wlan и заряжаться, но когда эти условия выполнены, задание выполняется как каждые 10 минут или даже чаще.
мой код:
JobInfo.Builder builder = new JobInfo.Builder(1,
new ComponentName(context.getPackageName(), SyncJobService.class.getName()));
builder.setPeriodic(TimeUnit.DAYS.toMillis(1))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setRequiresCharging(true)
.setRequiresDeviceIdle(true);
int code = jobScheduler.schedule(builder.build());
if (code <= 0) {
Log.e(TAG, "Could not scheduled job: " + code);
return;
}
Log.e(TAG, "Scheduled job");
задание выполняет фоновый поток для загрузки данных из интернета, и после загрузки данных я вызываю
mService.jobFinished(mParams, true);
чтобы уведомить Планировщик заданий, что работа сделана, и ее следует перенести. Почему задание выполняется так часто, даже если период установлен в один день? Мое устройство android 6.0.1 почти никогда не входит в режим дремоты из-за работы, выполняемой так часто.
1 ответов
после загрузки данных я вызываю
mService.jobFinished(mParams, true);
чтобы уведомить Планировщик заданий о том, что задание выполнено и его следует перенести
это ваша проблема. Использовать false
, а не true
.
false
говорит: "работа сделана для этой работы". true
говорит:"У нас была проблема, пожалуйста, перенесите эту работу снова, чтобы это произошло скоро". Например, критерии говорят, что у вас должно быть подключение к Интернету, но, возможно, у вас есть сложность подключения к серверу. В таком случае, return true
, в надежде, что проблема прояснится немного.
вы также можете рассмотреть возможность корректировки правил backoff via setBackoffCriteria()
для тех случаев, когда вы действительно хотите вернуть true
.