Что WorkManager делает с заданиями после достижения предела JobScheduler 100? - PullRequest
2 голосов
/ 13 февраля 2020

Я искал inte rnet для получения информации по этому вопросу, но, похоже, никто больше не сталкивался с этой проблемой.

Помните эту забавную ошибку?

java. lang.IllegalStateException: превышен предел задания JobScheduler 100. Мы считаем 101 вакансий WorkManager в JobScheduler; у нас есть 50 отслеживаемых рабочих мест в нашей БД; наш предел конфигурации составляет 50.

с

Причина: java .lang.IllegalStateException: приложения не могут планировать более 100 различных заданий

Что ж, несмотря на переключение большого количества заданий на enqueueUniqueWork, похоже, что некоторые из моих пользователей все еще достигают этого предела. Мой вариант использования для людей с плохой связью и отсутствием подключения, которые делают много вещей в автономном режиме и, таким образом, создают множество заданий для обновления ресурсов на удаленном сервере . У меня никогда не было этой проблемы с FirebaseJobDispatcher (по крайней мере, я об этом не знал), и некоторые люди могут оставаться без сигнала в течение нескольких дней, и что произойдет, если кто-то не сможет подключиться в течение нескольких недель? Это легко создаст сотни рабочих мест. Следовательно, эта ошибка.

Мой вопрос: что происходит с этими заданиями при достижении предела? Они просто отбрасываются планировщиком? Я теряю данные людей прямо сейчас, когда я набираю это?

Обновление

Android Версии: подтверждено на 7.0, 8.0, 8.1, возможно, намного больше

Версия WorkManager: 2.3.0

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Недавно мы исправили ошибку, из-за которой наблюдается несоответствие между WorkManager s отслеживанием заданий в JobScheduler и фактическим состоянием jobs. Это происходит в очень редких случаях, и я думаю, что это происходит в вашем случае.

https://issuetracker.google.com/issues/149092520 - недавно обнаруженная ошибка. Я исправил это до того, как об ошибке сообщили на трекере publi c, потому что одно из приложений Google столкнулось с тем же крайним случаем.

Это изменение (https://android-review.googlesource.com/c/platform/frameworks/support/+/1226859) исправлено. Мы должны выпустить это как часть WorkManager 2.3.2 очень скоро.

Если вы не можете ждать, вы можете использовать сборку снимка, которая должна быть идентична возможному выпуску.

Вот фрагмент gradle, который вам понадобится:

repositories {
    google()
    maven { url 'https://ci.android.com/builds/submitted/6195753/androidx_snapshot/latest/repository/' }
}

dependencies {
  implementation "androidx.work:work-runtime:2.4.0-SNAPSHOT"
}

Еще одна вещь, которую вам может понадобиться, это избавиться от устаревших заданий. Это так же просто, как вызов JobScheduler.cancelAllJobs() до инициализации WorkManager. Вы можете сделать это внутри Application.onCreate() в своем подклассе Application.

Если вам нужна дополнительная помощь, пожалуйста, не стесняйтесь обращаться к средству отслеживания ошибок, и я могу вам помочь.

0 голосов
/ 13 февраля 2020

Из сообщения об исключении кажется, что WorkMquager отслеживает только 20 рабочих запросов. Возможно, проблема связана с ошибкой в ​​базовой реализации JobScheduler. Было бы полезно понять, на каких устройствах / версиях ОС вы видели эти ошибки.

Кроме того, ограничения в 100 заданий относятся к приложению и не ограничено использованием WorkManager. Если в вашем приложении (или в SDK, который вы включаете) JobScheduler используется напрямую, это может помочь в достижении пределов 100 рабочих мест.

Наконец, не могли бы вы поделиться, какую версию WorkManager вы используете?

...