в моем приложении я установил периодическое задание, которое запускается каждые 30 минут. Первый запуск задания происходит прямо тогда, когда я планирую это периодическое задание, что в моем случае нежелательно. Я хочу пропустить первый запуск, чтобы он запускался в первый раз через 30+ минут.
Две мои мысли о том, как подойти к этому, заключались в том, чтобы либо вообще не запускать его в течение первых 30 минут (какая-то задержка), либо пометить первое задание как выполненное еще до того, как у него появится возможность начать. К сожалению, я не нашел в JobInfo
ни одного метода, который позволил бы мне сделать что-либо из этого.
Другой обходной путь, который удовлетворил бы мои потребности, состоял бы в том, чтобы каким-то образом ограничить выполнение заданий только тогда, когда приложение находится в фоновом режиме. Это не решает проблему полностью, но может послужить обходным путем в моем случае.
Ниже приведен мой текущий код для планирования периодического задания:
private void scheduleJob() {
ComponentName componentName = new ComponentName(this, myRecurringTask.class);
JobInfo info = new JobInfo.Builder(JOB_ID, componentName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.setPeriodic(1800000)
.build();
JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
scheduler.schedule(info);
}
Я надеюсь, что кто-то столкнулся с такой же ситуацией и может помочь мне решить ее... Спасибо!
WorkManager
:stackoverflow.com/questions/51229826/ - person Sam Chen   schedule 19.02.2021WorkManager
, я просто проверял его набор функций по сравнению сJobScheduler
, он действительно приносит немало улучшений, но при этом сохраняет обратную совместимость. Если я не найду решения сJobScheduler
, я перейду наWorkManager
и обязательно буду использовать его для новых приложений! - person Spyros G   schedule 19.02.2021