Периодическая работа в Android N (Nougat, 7.0) - PullRequest
0 голосов
/ 21 сентября 2018

Хорошо, поэтому я не могу найти какую-либо документацию или полезные веб-страницы по этому поводу.Помогите мне StackOverflow, вы моя единственная надежда.

Хорошо, поэтому изначально мой JobScheduler выглядит так:

JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
if(scheduler.getPendingJob(JOB_NUMBER) == null) {
    ComponentName componentName = new ComponentName(this, MyJobService.class);
    JobInfo info = new JobInfo.Builder(JOB_NUMBER, componentName)
            .setRequiresCharging(false)
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
            .setPersisted(true)
            .setPeriodic(60 * 60 * 1000L, 5 * 60 *1000)
            .build();
    int resultCode = scheduler.schedule(info);
    if (resultCode == JobScheduler.RESULT_SUCCESS) {
        Log.d(TAG, "Service is not running, Job " + String.valueOf(JOB_NUMBER) + " Scheduled.");
    } else {
        Log.d(TAG, "Service is not running, However job scheduling failed.");
    }
} else{
    Log.d(TAG, "Service is already scheduled.");
}

... Отлично работает в Oreo (v8.0).Однако в Nougat, v7.0, задание выполняется по расписанию, но никогда не запускается.В другом вопросе stackoverflow, который я задал, я узнал, что могу запустить его, заменив setPeriodic() на следующее:

.setMinimumLatency(1 * 1000)
.setOverrideDeadline(3 * 1000)

И с этим служба запускается.Тем не менее, это не периодически, он будет запускаться только один раз.Я не могу найти документацию / учебные пособия / примеры, которые позволяют мне выполнять периодическую работу в Android Nougat.Может ли кто-нибудь помочь мне с этим?

Есть другие вопросы о стеке потока по этой же теме:

Планировщик заданий не работает на Android N

Планировщик заданий Не повторяется периодически в Android 7.0 (Nougat)

Однако ни один из них не имеет однозначных ответов.

Последнее замечание: похоже, что передача FlexMillis на setPeriodic(), похоже, сработала.Я собираюсь сделать больше испытаний.Я не уверен, какой код я выполнял, когда запускался logcat, но я думаю, передав:

.setPeriodic(15 * 60 * 1000, 5 * 60 *1000)

В setPeriodic он сработал через 10 минут после того, как было запланировано задание.Однако, в отличие от Oreo, задание не запускается при первом его назначении.В Oreo, как только я создаю задание, задание запускается.Опять же, я не могу найти это упомянутое в документации.

1 Ответ

0 голосов
/ 21 сентября 2018

Вы должны использовать https://developer.android.com/topic/libraries/architecture/workmanager/. Это новый инструмент Android, использующий JobScheduler / AlarmManager и т. Д. В зависимости от ситуации.

...