WorkManager добавляет слишком много заданий в JobScheduler

Я пытаюсь запланировать выполнение задачи в определенное время с помощью WorkManager. Я использую beginUniqueWork, так как хочу, чтобы для этого идентификатора (uniqueWorkName) одновременно планировалась только одна задача. Но после нескольких вызовов enqueue в какой-то момент я получаю следующую ошибку:

java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
    at android.os.Parcel.readException(Parcel.java:2012)
    at android.os.Parcel.readException(Parcel.java:1950)
    at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:180)
    at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:44)
    at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:85)
    at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:64)
    at androidx.work.impl.Schedulers.scheduleInternal(Schedulers.java:98)
    at androidx.work.impl.Schedulers.schedule(Schedulers.java:69)
    at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(WorkManagerImpl.java:398)
    at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:66)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

Когда я регистрирую количество ожидающих заданий, используя следующий фрагмент после каждого enqueue, я заметил, что в список добавляются 3 новых задания для каждого вызова (хотя я ожидаю, что общее количество останется на уровне 1).

JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
int size = jobScheduler.getAllPendingJobs().size();

Вот код, который я использую для планирования задач:

val work = OneTimeWorkRequest.Builder(workerClass)
        .setInitialDelay(offset, TimeUnit.MILLISECONDS)
        .build()
WorkManager.getInstance()
        .beginUniqueWork(uniqueNameForTask, ExistingWorkPolicy.REPLACE, work)
        .enqueue()

Здесь что-то не так? Что мне не хватает? ????


person iamkaan    schedule 18.08.2018    source источник
comment
Какая у вас текущая рабочая версия?   -  person    schedule 18.08.2018
comment
Была 1.0.0-alpha01. Обновление до 1.0.0-alpha07 решило проблему ????   -  person iamkaan    schedule 20.08.2018


Ответы (1)


В соответствии с примечаниями к выпуску WorkManager 1.0.0-alpha07, одним из исправления для 1.0.0-alpha07:

Завершенная работа теперь корректно отменяет все отложенные копии этой работы в других Планировщиках. Это привело к превышению лимита заданий JobScheduler. b / 111569265

Поэтому обновление до 1.0.0-alpha07 должно решить вашу проблему.

person ianhanniballake    schedule 18.08.2018