WorkManager
Последнее обновление | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
---|---|---|---|---|
27 августа 2025 г. | 2.10.3 | - | - | 2.11.0-альфа01 |
Объявление зависимостей
Чтобы добавить зависимость от WorkManager, необходимо добавить репозиторий Google Maven в свой проект:
Добавьте зависимости для необходимых артефактов в файл build.gradle
вашего приложения или модуля:
классный
dependencies { def work_version = "2.10.3" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Котлин
dependencies { val work_version = "2.10.3" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Информацию об использовании расширений Kotlin см. в документации ktx .
Дополнительную информацию о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Версия 2.11
Версия 2.11.0-альфа01
27 августа 2025 г.
Выпущен androidx.work:work-*:2.11.0-alpha01
. Версия 2.11.0-alpha01 содержит следующие коммиты .
Изменения API
- minSdk обновлен с API 21 до API 23 ( Ibdfca , b/380448311 , b/435705964 , b/435705223 )
- В конструктор конфигураций WorkManager добавлен API
setRemoteSessionTimeoutMillis
, позволяющий настраивать время существования сеанса RemoteWorkManager с момента последнего использования. ( Ib23c8 ) - Добавить экспериментальный API в
WorkRequest.Builder
для применения отсрочки, когда работа прерывается системой. ( Ie2dc7 , b/335513480 ) - Добавить тестовый API для передачи в
TestListenableWorkerBuilder
другого рабочего класса, нежели тот, который создается для поддержки пользовательских реализацийWorkerFactory
( If6bff , b/389154854 )
Исправления ошибок
- Возможности кэширования сети в
SharedNetworkCallback
для предотвращения ненужных межпроцессных взаимодействий ( Ie4027 , b/427115602 ) - Исправлена проблема с оценкой сетевых ограничений, из-за которой рабочие элементы после первого не получали текущих сетевых возможностей и вместо этого по истечении времени ожидания достигали
ConstraintsNotMet
( Ib6a66 , b/427115602 ).
Версия 2.10
Версия 2.10.3
30 июля 2025 г.
Выпущен androidx.work:work-*:2.10.3
. Версия 2.10.3 содержит следующие коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой работники с такими же сетевыми ограничениями, как у предыдущего работника, сообщали, что их ограничения не соблюдаются. ( b/427115602 ).
Версия 2.10.2
18 июня 2025 г.
Выпущен androidx.work:work-*:2.10.2
. Версия 2.10.2 содержит следующие коммиты .
Исправления ошибок
- Исправлена проблема с сохранением рабочих процессов с сетевыми запросами и возможностями по умолчанию, которая приводила к повторному добавлению удаленных возможностей, что приводило к некорректной работе рабочих процессов с сетевыми ограничениями. ( b/409716532 )
- Исправлена ошибка, из-за которой исполнители с сетевыми ограничениями не выполняли работу быстро из-за невыполненных ограничений, даже если сеть и возможности были доступны. ( b/423403088 )
Версия 2.10.1
23 апреля 2025 г.
Выпущен androidx.work:work-*:2.10.1
. Версия 2.10.1 содержит следующие коммиты .
Исправления ошибок
- Уменьшить вероятность возникновения исключения
TooManyRequestsException
при регистрацииWorkManager
NetworkCallback
, используемого для отслеживания ограничений. ( b/231499040 , b309d5 ).
Версия 2.10.0
30 октября 2024 г.
Выпущен androidx.work:work-*:2.10.0
. Версия 2.10.0 содержит следующие коммиты .
Значительные изменения по сравнению с версией 2.9.1
- Добавлены теги трассировки к заданиям из
WorkManager
, что значительно упрощает понимание команды «adb shell dumpsys jobscheduler», поскольку она содержит имя выполняемого Worker. Также добавлены разделы трассировки вокруг ключевых областейWorkManager
. -
Configuration.workerCoroutineContext
был добавлен для управления диспетчером, в котором выполняетсяCoroutineWorker
. - Разработчики могут указать
NetworkRequest
в качестве ограничения для воркера с помощью методаConstraints.setRequiredNetworkRequest
. Это обеспечивает более детальный контроль над сетью, которую должен запускать этот воркер. -
WorkManager
2.10.0 теперь скомпилирован с SDK 35 и содержит различные изменения для совместимости с SDK 35.
Версия 2.10.0-rc01
24 октября 2024 г.
Выпущен androidx.work:work-*:2.10.0-rc01
. Версия 2.10.0-rc01 содержит следующие коммиты .
Версия 2.10.0-beta01
2 октября 2024 г.
Выпущен androidx.work:work-*:2.10.0-beta01
. Версия 2.10.0-beta01 содержит следующие коммиты .
Версия 2.10.0-альфа04
18 сентября 2024 г.
Выпущен androidx.work:work-*:2.10.0-alpha04
. Версия 2.10.0-alpha04 содержит следующие коммиты .
Изменения API
- Добавьте причину остановки
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
для случая, когда рабочий процесс переднего плана останавливается из-за истечения времени ожидания выполнения в зависимости от типа службы переднего плана. ( Ibd0af )
Версия 2.10.0-альфа03
4 сентября 2024 г.
Выпущен androidx.work:work-*:2.10.0-alpha03
. Версия 2.10.0-alpha03 содержит следующие коммиты .
Новые функции
- Добавлены теги трассировки к заданиям из
WorkManager
, что значительно упрощает понимание команды «adb shell dumpsys jobscheduler», поскольку она содержит имя выполняемого Worker. Также добавлены разделы трассировки вокруг ключевых областейWorkManager
.
Изменения API
- WorkManager 2.10.0 теперь скомпилирован с SDK 35.
- Исправлена проблема с тайм-аутом активных рабочих процессов типа «short service» и «data sync», приводившая к возникновению ошибки ANR, когда
WorkManager
не вызывалstopSelf()
. Это исправление применимо только к устройствам с API 34 и 35, где были реализованы типы активных служб. ( ca06b2 , b/364508145 ) - Новые API
WorkerParameters
, позволяющие переключать удаленный процесс, к которому привязываетсяWorker
при использованииWorkerFactory
. ( Ibdc8a , Ie8a90 , I7373f )
Исправления ошибок
- Исправлен сбой, вызванный попыткой
WorkManager
перезапустить долго работающий обработчик (т. е. обработчик переднего плана), если у типа работы переднего плана были отозваны необходимые разрешения Android 14. ( b/333957914 ) - Удалено ручное описание доступа к новым API платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или более поздней версии (например, R8 версии 3.3) и для всех сборок с использованием AGP 8.1 или более поздней версии (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется обновиться до D8 версии 8.1 или более поздней. Подробнее см. в этой статье . ( Ia60e0 , b/345472586 )
Версия 2.10.0-альфа02
17 апреля 2024 г.
Выпущен androidx.work:work-*:2.10.0-alpha02
. Версия 2.10.0-alpha02 содержит следующие коммиты .
Изменения API
- Добавлена возможность создавать области трассировки с помощью настраиваемого
@RestrictTo
Tracer
вWorkManager
. ( I17d7f , b/260214125 ) - Добавлен
Configuration.workerCoroutineContext
для управления диспетчером, в котором выполняетсяCoroutineWorker
. Это позволяет полностью избежать использованияDispatchers.Default
вWorkManager
. ( ICD1B7 ) - Добавить пользовательские обработчики исключений для Workers ( Ib1b74 , b/261190695 )
-
OneTimeWorkRequest.Builder
иPeriodicWorkRequest.Builder
теперь можно создавать с помощьюKClass
вместоClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
( Ib55f6 ) - Класс
WorkManager
был перенесён в Kotlin. Теперь методы, возвращающиеLiveData
,ListenableFuture
илиFlow
предоставляют корректную информацию о допустимости значений NULL. Это может потребовать внесения изменений в исходный код клиента, если предположения о допустимости значений NULL в этом коде были неверными. ( If6757 )
Версия 2.10.0-альфа01
24 января 2024 г.
Выпущена версия androidx.work:work-*:2.10.0-alpha01
. Версия 2.10.0-alpha01 содержит следующие коммиты.
Новые функции
- Разработчики могут указать
NetworkRequest
в качестве ограничения для воркера с помощью методаConstraints.setRequiredNetworkRequest
. Это обеспечивает более детальный контроль над сетью, которую должен запускать этот воркер.
Изменения API
- Добавление возможности указывать
NetworkRequest
в качестве ограничения. ( Id98a1 , b/280634452 )
Версия 2.9
Версия 2.9.1
7 августа 2024 г.
Выпущен androidx.work:work-*:2.9.1
. Версия 2.9.1 содержит следующие коммиты .
Исправления ошибок
- Исправлен сбой, вызванный попыткой
WorkManager
перезапустить долго работающий обработчик (т. е. обработчик переднего плана), если у типа работы переднего плана были отозваны необходимые разрешения Android 14. ( b/333957914 )
Версия 2.9.0
29 ноября 2023 г.
Выпущен androidx.work:work-*:2.9.0
. Версия 2.9.0 содержит следующие коммиты.
Важные изменения по сравнению с версией 2.8.0
- Наблюдаемость через
Flow
-s. ВместоLiveData
ход выполнения Worker теперь можно отслеживать через Flow с помощьюWorkManager.getWorkInfosFlow
и аналогичных методов. - Теперь
WorkManager
предоставляет подсказку о причине предыдущей остановки воркера. Эту информацию можно получить из самого воркера с помощью методаgetStopReason()
или изWorkInfo
с помощью методаgetStopReason()
. - Точное планирование периодических рабочих процессов с помощью
setNextScheduleTimeOverride
. Это позволяет динамически рассчитывать расписание следующего периодического рабочего процесса, которое можно использовать для реализации расширенных функций, таких как адаптивное время обновления, настраиваемое поведение повторных попыток или запуск рабочего процесса новостной ленты каждое утро до пробуждения пользователя без сдвига. С этими методами следует использоватьExistingPeriodicWorkPolicy.UPDATE
, чтобы избежать отмены текущего рабочего процесса при планировании следующего. - Тестирование WorkManager с потоками, соответствующими производству.
ExecutorsMode.PRESERVE_EXECUTORS
можно использовать вinitializeTestWorkManager
для сохранения исполнителей, заданных вConfiguration
, и использования реального основного потока. - API сопрограмм, такие как
CoroutineWorker
были перемещены из дополнительного артефакта work-runtime-ktx в основной артефакт work-runtime. work-runtime-ktx теперь пуст.
Изменения API
- В
WorkInfo
добавленаstopReason
. Она делаетstopReason
доступной после завершения работы воркера. Это может быть полезно для удобного отчётаstopReason
, поскольку после остановки воркера само приложение может быть очень быстро завершено. ( I21386 ) - Разрешить настройку
Clock
через конфигурацию и их использование для управления последовательностью выполнения тестов Worker. ( Ic586e ) - В
ListenableWorker
добавлен методgetStopReason()
, который дает подсказку о причине остановки рабочего процесса. ( I07060 ) - Добавлен
WorkManagerTestInitHelper#closeWorkDatabase()
чтобы избежать предупреждения Closeguard об утечке ресурсов. ( Ia8d49 ) - Конструктор
WorkInfo
теперь общедоступный, что может быть полезно при тестировании. ( Ia00b6 , b/209145335 ) -
work-runtime-ktx
теперь пуст,CoroutineWorker
и другие специфичные для Kotlin утилиты теперь доступны в основном артефакте work-runtime. ( I71a9a ) - Добавлен метод
setNextScheduleTimeOverride
, позволяющий точно настраивать периодические графики работы ( I3b4da ). - Добавлен метод
getNextScheduleTimeMillis
для получения информации о запланированном времени выполнения вWorkInfo
. ( I797e4 ) - Начальная информация о задержке и периодичности добавляется в
WorkInfo
. ( I52f2f ) - Добавлен метод наблюдения за работниками через потоки с помощью методов
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
( If122a ) - Добавлены отсутствующие аннотации
@RequiresApi(...)
к конструкторам и свойствамConstraints
. Теперь они приведены в соответствие с соответствующими аннотациями для сеттеров вConstraints.Builder
, которые существовали в ранних версияхWorkManager
. ( I6d7d2 ) -
WorkManager
теперь есть отдельный лимит для рабочих процессов Content URI, чтобы гарантировать им слоты вJobScheduler
и предотвратить пропуск обновлений контента при высокой нагрузке. Этот лимит можно настроить с помощьюConfiguration.Builder.setContentUriTriggerWorkersLimit
( Ic128f ). - Ограничения добавляются в
WorkInfo
. ( I162c0 )
Версия 2.9.0-rc01
18 октября 2023 г.
Выпущена версия androidx.work:work-*:2.9.0-rc01
. Версия 2.9.0-rc01 содержит следующие коммиты.
- Никаких изменений с момента последнего бета-релиза.
Версия 2.9.0-beta01
6 сентября 2023 г.
Выпущена версия androidx.work:work-*:2.9.0-beta01
. Версия 2.9.0-beta01 содержит следующие коммиты.
Изменения API
- Добавлены константы для причин остановки, возвращаемых
WorkInfo.stopReason
иListenableWorker.stopReason
( I0cc00 ).
Версия 2.9.0-альфа02
26 июля 2023 г.
Выпущена версия androidx.work:work-*:2.9.0-alpha02
. Версия 2.9.0-alpha02 содержит следующие коммиты.
Новые функции
- Теперь
WorkManager
предоставляет подсказку о причине предыдущей остановки воркера. Эту информацию можно получить из самого воркера с помощью методаgetStopReason()
или изWorkInfo
с помощью методаgetStopReason()
.
Изменения API
- В
WorkInfo
добавленаstopReason
. Она делаетstopReason
доступным после завершения рабочего процесса. Это может быть полезно для удобного отчётаstopReason
, поскольку после остановки рабочего процесса само приложение может быть очень быстро завершено. ( I21386 ) - Разрешить настройку часов через конфигурацию и их использование для управления последовательностью выполнения тестов Worker. ( Ic586e )
- В
ListenableWorker
добавлен методgetStopReason()
, который дает подсказку о причине остановки рабочего процесса. ( I07060 ) - Добавлен
WorkManagerTestInitHelper#closeWorkDatabase()
чтобы избежать предупреждения Closeguard об утечке ресурсов. ( Ia8d49 )
Исправления ошибок
- Добавлена возможность обхода
overrideNextScheduleTime
с помощьюTestDriver
и исправлены проблемы с тестируемостью. ( Ic2905 )
Версия 2.9.0-альфа01
7 июня 2023 г.
Выпущена версия androidx.work:work-*:2.9.0-alpha01
. Версия 2.9.0-alpha01 содержит следующие коммиты.
Новые функции
- Наблюдаемость через
Flow
-s. ВместоLiveData
ход выполнения Worker теперь можно отслеживать через Flow с помощьюWorkManager.getWorkInfosFlow
и аналогичных методов. - Точное планирование периодических рабочих процессов с помощью
setNextScheduleTimeOverride
. Это позволяет динамически рассчитывать расписание следующего периодического рабочего процесса, которое можно использовать для реализации расширенных функций, таких как адаптивное время обновления, настраиваемое поведение повторных попыток или запуск рабочего процесса новостной ленты каждое утро до пробуждения пользователя без сдвига. С этими методами следует использоватьExistingPeriodicWorkPolicy.UPDATE
, чтобы избежать отмены текущего рабочего процесса при планировании следующего. - Тестирование
WorkManager
с потоками, соответствующими производству.ExecutorsMode.PRESERVE_EXECUTORS
можно использовать для сохранения исполнителей, заданных вConfiguration
, и использования реального основного потока. - API сопрограмм, такие как
CoroutineWorker
были перемещены из дополнительного артефактаwork-runtime-ktx
в основной артефактwork-runtime
.work-runtime-ktx
теперь пуст.
Изменения API
- Конструктор
WorkInfo
теперь общедоступный, что может быть полезно при тестировании. ( Ia00b6 , b/209145335 ) -
work-runtime-ktx
теперь пуст,CoroutineWorker
и другие специфичные для Kotlin утилиты теперь доступны в основном артефактеwork-runtime
. ( I71a9a ) - Добавлен метод
setNextScheduleTimeOverride
, позволяющий точно настраивать периодические графики работы ( I3b4da ). - Переименован
getEarliestRunTimeMillis
вgetNextScheduleTimeMillis
. ( I2bd7a ) - Информация о следующем запланированном времени выполнения добавляется в
WorkInfo
. ( I797e4 ) - Начальная информация о задержке и периодичности добавляется в
WorkInfo
. ( I52f2f ) - Добавлен метод наблюдения за работниками через потоки с помощью методов
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
( If122a ) - Добавлены отсутствующие аннотации
@RequiresApi(...)
к конструкторам и свойствам Constraints. Теперь они приведены в соответствие с соответствующими аннотациями сеттеров вConstraints.Builder
, которые существовали в ранних версияхWorkManager
. ( I6d7d2 ) -
WorkManager
теперь имеет отдельный лимит для рабочих URI контента, чтобы гарантировать им слоты вJobScheduler
и предотвратить пропуск обновлений контента при высокой нагрузке. Лимит можно настроить с помощьюConfiguration.Builder.setContentUriTriggerWorkersLimit
( Ic128f ). - Ограничения добавляются в
WorkInfo
. ( I162c0 )
Версия 2.8
Версия 2.8.1
22 марта 2023 г.
Выпущен androidx.work:work-*:2.8.1
. Версия 2.8.1 содержит следующие коммиты.
Исправления ошибок
- Исправлена ошибка ANR в
RescheduleReceiver
, которая ранее некорректно обрабатывала две одновременные трансляции. ( b/236906724 )
Версия 2.8.0
8 февраля 2023 г.
Выпущен androidx.work:work-*:2.8.0
. Версия 2.8.0 содержит следующие коммиты.
Важные изменения по сравнению с версией 2.7.0
Новые функции
- Добавлена возможность обновлять
WorkRequests
неинтрузивным способом, сохраняя исходное время постановки в очередь, цепочку и т. д. Подробную информацию см. в блоге об этой функции, а также в документации Javadocs дляWorkManager.updateWork
иExistingPeriodicWorkPolicy.UPDATE
.
Изменения API
-
WorkManager.updateWork
был добавлен для обновления работы с сохранением ее исходного времени постановки в очередь и цепочки. ( I9a248 , b/219446409 ) - Добавлена политика
ExistingPeriodicWorkPolicy.UPDATE
. Эта политика позволяет обновлять периодическую задачу по имени. Она похожа на существующуюREPLACE
, но менее навязчива: она не отменяет рабочий процесс, если он в данный момент выполняется, и сохраняет время постановки в очередь — начальная задержка и период рассчитываются на основе исходного времени постановки в очередь, а не времени обновления.REPLACE
устарела, чтобы избежать путаницы между очень похожими именамиREPLACE
иUPDATE
. Если вы всё ещё хотите сохранить прежнюю семантикуREPLACE
, можно использовать новую добавленнуюCANCEL_AND_REENQUEUE
, которая идентичнаREPLACE
. ( I985ed , b/219446409 ) - Добавлена возможность перехвата исключений планирования, предоставляющих
Consumer<Throwable>
через setSchedulingExceptionHandler ) - Добавлена возможность предоставлять
Consumer<Throwable>
через setInitializationExceptionHandler для определения наличия проблем при попытке инициализации WorkManager. - Встроенные вспомогательные методы для
OneTimeWorkRequest
иPeriodicWorkRequest
были перенесены изandroidx.work:work-runtime-ktx
вandroidx.work:work-runtime
( I0010f , b/209145335 ) - Вспомогательные методы
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
были добавлены для непосредственного созданияWorkQuery
. ( b/199919736 ) ( If48f2 , b/199919736 ) - Добавлен
getForegroundInfo
вWorker
. ( Ic1ead ) -
RxWorker
для RxJava 2 и RxJava 3 теперь имеетsetForeground
возвращающийCompletable
, который можно использовать вместоsetForegroundInfoAsync
, возвращающегоListenableFuture
-
RxWorker
как для RxJava 2, так и для RxJava 3 имеетgetForegroundInfo
возвращающийSingle
, который можно использовать вместоgetForegroundInfoAsync
, который возвращаетListenableFuture
. ( b/203851459 ) - Ограничения теперь можно создавать напрямую, а не с помощью
Constraints.Builder
, что удобно для пользователей Kotlin. ( Idc390 , b/137568653 ) - Добавлена возможность проверки инициализации
WorkManager
. Также добавлен новый APIgetConfiguration()
для разработчиков библиотек, позволяющий получить конфигурацию, с которой был инициализированWorkManager
. ( I6eff3 , b/212300336 )
Исправления ошибок
- Исправлена проблема с «жадным» планировщиком, из-за которой рабочие процессы не запускались немедленно при нагрузке. ( I9686b , b/248111307 )
- Добавлено
@RequiresPermission
для API, требующих предоставления разрешенияPOST_NOTIFICATIONS
в SDK 33 и выше. ( Ie542e , b/238790278 ) - Распространять отмены в
CoroutineScope
наListenableFuture
при использованииsuspendCancellableCoroutine
.
Версия 2.8.0-rc01
7 декабря 2022 г.
Выпущена версия androidx.work:work-*:2.8.0-rc01
. Версия 2.8.0-rc01 содержит следующие коммиты.
Новые функции
- В этом выпуске нет новых функций. Это, по сути, повышение версии.
Версия 2.8.0-beta02
9 ноября 2022 г.
Выпущена версия androidx.work:work-*:2.8.0-beta02
. Версия 2.8.0-beta02 содержит следующие коммиты.
Исправления ошибок
- Исправлен метод
equals
вWorkInfo
, который ранее не учитывал информацию о новом поколении. ( 4977cc )
Версия 2.8.0-beta01
5 октября 2022 г.
Выпущена версия androidx.work:work-*:2.8.0-beta01
. Версия 2.8.0-beta01 содержит следующие коммиты.
Исправления ошибок
- Исправлена проблема с «жадным» планировщиком, из-за которой рабочие процессы не запускались немедленно при нагрузке. ( I9686b , b/248111307 )
Версия 2.8.0-альфа04
7 сентября 2022 г.
Выпущена версия androidx.work:work-*:2.8.0-alpha04
. Версия 2.8.0-alpha04 содержит следующие коммиты.
Изменения API
- Добавлены
WorkerInfo.getGeneration()
иWorkerParameters.getGeneration()
, возвращающие поколение воркера. У воркера есть несколько поколений, если он был обновлен с помощьюWorkManager.updateWork
илиWorkManager.enqueueUniquePeriodicWork
с помощьюExistingPeriodicWorkPolicy.UPDATE
. Обратите внимание: если воркер в данный момент запущен, этот метод может вернуть более новое поколение, основанное на поколении текущего воркера, если обновление произошло во время его выполнения. ( I665c5 , b/219446409 ) ( I128a9 , b/219446409 ) - Добавлен
InitializationExceptionHandler
— обработчик исключений, который можно использовать для определения наличия проблем при попытке инициализацииWorkManager
. ( I061de )
Версия 2.8.0-альфа03
10 августа 2022 г.
Выпущена версия androidx.work:work-*:2.8.0-alpha03
. Версия 2.8.0-alpha03 содержит следующие коммиты.
Новые функции
- Добавлена возможность обновлять
WorkRequests
неинтрузивным способом, сохраняя исходное время постановки в очередь, цепочку и т. д. Дополнительные сведения см. вWorkManager.updateWork
иExistingPeriodicWorkPolicy.UPDATE
.
Изменения API
-
WorkManager.updateWork
был добавлен для обновления работы с сохранением ее исходного времени постановки в очередь и цепочки. ( I9a248 , b/219446409 ) - Добавлена политика
ExistingPeriodicWorkPolicy.UPDATE
. Эта политика позволяет обновлять периодическую задачу по имени. Она похожа на существующуюREPLACE
, но менее навязчива: она не отменяет рабочий процесс, если он в данный момент выполняется, и сохраняет время постановки в очередь — начальная задержка и период рассчитываются на основе исходного времени постановки в очередь, а не времени обновления. ПолитикаREPLACE
устарела, чтобы избежать путаницы между очень похожими именамиREPLACE
иUPDATE
. Если вы всё же хотите сохранить прежнюю семантикуREPLACE
, можно использовать новую политикуCANCEL_AND_REENQUEUE
, которая идентичнаREPLACE
. ( ред. 1985 г. , б/н 219446409 ) - Добавить возможность перехвата исключений планирования путем определения
SchedulingExceptionHandler
. ( I033eb ) - Встроенные вспомогательные методы для
OneTimeWorkRequest
иPeriodicWorkRequest
были перенесены изandroidx.work:work-runtime-ktx
вandroidx.work:work-runtime
( I0010f , b/209145335 )
Исправления ошибок
- Добавлено
@RequiresPermission
для API, требующих предоставления разрешения POST_NOTIFICATIONS в SDK 33 и выше. ( Ie542e , b/238790278 )
Версия 2.8.0-альфа02
6 апреля 2022 г.
Выпущена версия androidx.work:work-*:2.8.0-alpha02
. Версия 2.8.0-alpha02 содержит следующие коммиты.
Изменения API
- Ограничения теперь можно создавать напрямую, а не с помощью Builder, что удобно для пользователей Kotlin. ( Idc390 , b/137568653 )
- Добавлена возможность проверки инициализации
WorkManager
. Также добавлен новый APIgetConfiguration()
для разработчиков библиотек, позволяющий получить конфигурацию, с которой был инициализированWorkManager
. ( I6eff3 , b/212300336 )
Версия 2.8.0-альфа01
12 января 2022 г.
Выпущена версия androidx.work:work-*:2.8.0-alpha01
. Версия 2.8.0-alpha01 содержит следующие коммиты.
Изменения API
- Добавлены вспомогательные методы
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
для непосредственного создания WorkQuery. ( If48f2 , b/199919736 ) - Добавляет экспериментальные методы BuildCompat для будущих SDK ( Iafd82 , b/207528937 )
- Добавить
getForegroundInfo
кWorker
. ( Ic1ead ) - Добавлены вспомогательные методы
WorkQuery.fromIds
для создания WorkQuery непосредственно из идентификаторов. ( Ie5bdf , b/199919736 ) - RxWorker теперь имеет
setForeground
возвращающийCompletable
, который можно использовать вместоsetForegroundInfoAsync
, возвращающегоListenableFuture
. ( I85156 ) - RxWorker для RxJava 2 теперь имеет
getForegroundInfo
возвращающийSingle
, который можно использовать вместоgetForegroundInfoAsync
, возвращающегоListenableFuture
. ( I21c91 , b/203851459 ) - RxWorker для RxJava 3 теперь имеет
getForegroundInfo
возвращающийSingle
, который можно использовать вместоgetForegroundInfoAsync
, возвращающегоListenableFuture
. ( I1ca8a ) - В RxWorker теперь есть
setForeground
возвращающийCompletable
, который можно использовать вместоsetForegroundInfoAsync
, возвращающегоListenableFuture
. ( I992a3 , b/203851459 )
Исправления ошибок
- Распространять отмены в
CoroutineScope
наListenableFuture
при использованииsuspendCancellableCoroutine
. ( I77e63 )
Версия 2.7
Версия 2.7.1
17 ноября 2021 г.
Выпущен androidx.work:work-*:2.7.1
. Версия 2.7.1 содержит следующие коммиты.
Исправления ошибок
- Отмены в
CoroutineScope
распространяются наListenableFuture
при использованииsuspendCancellableCoroutine
. ( I77e63 ) - Исключение возникает немедленно, когда отложенные запросы на работу помечаются как ускоренные. bef1762
Версия 2.7.0
13 октября 2021 г.
Выпущен androidx.work:work-*:2.7.0
. Версия 2.7.0 содержит следующие коммиты.
Важные изменения по сравнению с версией 2.6.0
WorkManager представляет новый API
WorkRequest.Builder.setExpedited(...)
для помощи с ограничениями Foreground Service в Android 12.При использовании
setExpedited(...)
WorkManager делегирует полномочия ускоренным заданиям в JobScheduler, начиная с Android 12, обеспечивая обратную совместимость с предыдущими версиями Android путем делегирования полномочий приоритетной службе.
Версия 2.7.0-rc01
29 сентября 2021 г.
Выпущена версия androidx.work:work-*:2.7.0-rc01
. Версия 2.7.0-rc01 содержит следующие коммиты.
Эта версия идентична androidx.work:work-*:2.7.0-beta01
.
Версия 2.7.0-beta01
1 сентября 2021 г.
Выпущена версия androidx.work:work-*:2.7.0-beta01
. Версия 2.7.0-beta01 содержит следующие коммиты.
Новые функции
- Уменьшение конкуренции между процессами SQLite при инициализации WorkManager.
Изменения API
- Удалите API
@ExperimentalExpeditedWork
, поскольку API базовой платформы для Android 12 (S) стабильны. ( aosp/1792806 )
Исправления ошибок
- Предоставить лучшее сообщение об ошибке для ускоренных рабочих процессов, которые не реализуют
getForegroundInfoAsync()
. ( aosp/1809376 )
Версия 2.7.0-альфа05
21 июля 2021 г.
Выпущена версия androidx.work:work-*:2.7.0-alpha05
. Версия 2.7.0-alpha05 содержит следующие коммиты.
Этот выпуск также содержит исправления ошибок из выпуска WorkManager 2.6.0-beta02
.
Версия 2.7.0-альфа04
2 июня 2021 г.
Выпущена версия androidx.work:work-*:2.7.0-alpha04
.
Этот выпуск также содержит изменения по сравнению с выпуском 2.6.0-beta01 .
Изменения API
-
ListenableWorker.setForegroundAsync()
больше не считается устаревшим. - Мы рекомендуем использовать API
WorkRequest.Builder.setExpedited(...)
по возможности. Для лучшей поддержки ситуаций, когда приложение не подвержено ограничениям приоритетных служб , разработчики могут использовать APIListenableWorker.setForegroundAsync()
. - Если вызывается
ListenableWorker.setForegroundAsync()
, когда приложение подчиняется ограничениям службы переднего плана, будет выдано исключение ForegroundServiceStartNotAllowedException .
Исправления ошибок
- При переносе сроков выполнения срочных заданий они перестают быть срочными. Они становятся обычными заданиями.
Версия 2.7.0-альфа03
21 апреля 2021 г.
Выпущена версия androidx.work:work-*:2.7.0-alpha03
. Версия 2.7.0-alpha03 содержит следующие коммиты.
Новые функции
Начиная с WorkManager
2.6.0-alpha02
: добавлена поддержка Workers, которые могут запускаться в любом процессе. ( Iaf200 )Начиная с WorkManager
2.6.0-alpha02
: добавленRemoteCoroutineWorker
, представляющий собой реализациюRemoteListenableWorker
, которая может привязываться к удаленному процессу. ( I30578 )
Изменения API
- Начиная с WorkManager
2.6.0-alpha02
: добавлена поддержка сетевого ограниченияTEMPORARILY_UNMETERED
. ( I08d5e ) - Начиная с WorkManager
2.6.0-alpha02
: поддержка многопроцессного рабочего процесса дляsetProgressAsync()
. ( Ib6d08 ) - Начиная с WorkManager
2.6.0-alpha02
: сделайтеWorkManagerInitializer
публичным, чтобы другиеandroidx.startup.Initializer
могли использовать их в качестве зависимостей. ( I5ab11 )
Версия 2.7.0-альфа02
10 марта 2021 г.
Выпущена версия androidx.work:work-*:2.7.0-alpha02
. Версия 2.7.0-alpha02 содержит следующие коммиты.
Исправления ошибок
- Сделайте изменчивость
PendingIntent
явной, чтобы исправить сбой при использовании Android 12. ( b/180884673 )
Версия 2.7.0-альфа01
18 февраля 2021 г.
Выпущена версия androidx.work:work-*:2.7.0-alpha01
. Версия 2.7.0-alpha01 содержит следующие коммиты.
Новые функции
WorkManager представляет новый API
WorkRequest.Builder.setExpedited(...)
для учета ограничений службы переднего плана в Android 12.Приложения больше не могут запускать службу переднего плана, находясь в фоновом режиме. Поэтому для лучшей поддержки длительной работы, которая ранее была привязана к жизненному циклу службы переднего плана, приложения могут помечать запросы
WorkRequest
как ускоренные .Этот API является заменой API
setForegroundAsync(...)
/setForeground(...)
, которые в настоящее время устарели .При использовании
setExpedited(...)
WorkManager делегирует задачи ускоренным заданиям вJobScheduler
, начиная с Android 12, обеспечивая обратную совместимость с предыдущими версиями Android путем делегирования задачам переднего плана,
Изменения API
- Добавить поддержку ускоренных
WorkRequest
-ов.
Версия 2.6.0
Версия 2.6.0
1 сентября 2021 г.
Выпущен androidx.work:work-*:2.6.0
. Версия 2.6.0 содержит следующие коммиты.
Важные изменения по сравнению с версией 2.5.0
WorkManager теперь использует
androidx.startup
для инициализации WorkManager. Если ранее вы использовалиtools:node="remove"
ContentProvider
, используемого для инициализации WorkManager, вам нужно сделать следующее.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" />
Добавлена поддержка Workers, которые могут запускаться в любом процессе. ( Iaf200 )
Добавлен
RemoteCoroutineWorker
, который является реализацией RemoteListenableWorker и может привязываться к удаленному процессу. ( I30578 )
Версия 2.6.0-rc01
4 августа 2021 г.
Выпущена версия androidx.work:work-*:2.6.0-rc01
. Версия 2.6.0-rc01 содержит следующие коммиты.
Эта версия идентична androidx.work:work-*:2.6.0-beta02
.
Версия 2.6.0-beta02
21 июля 2021 г.
Выпущена версия androidx.work:work-*:2.6.0-beta02
. Версия 2.6.0-beta02 содержит следующие коммиты.
Исправления ошибок
-
RemoteWorkManager
теперь корректно отвязывается отRemoteWorkManagerService
, что позволяетRemoteWorkManagerService
корректно выполнять очистку. aosp/1730694 -
RemoteListenableWorker
теперь корректно отвязывается отRemoteWorkerService
, что позволяетRemoteWorkerService
корректно выполнять очистку. aosp/1743817 -
ForceStopRunnable
теперь запускается только в основном процессе приложения. Это оптимизация, которая позволяет избежать конкуренции за ресурсы для приложений, использующих несколько процессов. aosp/1749180 , aosp/1761729
Версия 2.6.0-beta01
2 июня 2021 г.
Выпущена версия androidx.work:work-*:2.6.0-beta01
. Версия 2.6.0-beta01 содержит следующие коммиты.
В этом выпуске содержатся незначительные улучшения документации. В целом, он идентичен версии 2.6.0-alpha02 .
Версия 2.6.0-альфа02
21 апреля 2021 г.
Выпущена версия androidx.work:work-*:2.6.0-alpha02
. Версия 2.6.0-alpha02 содержит следующие коммиты.
Новые функции
Добавляет поддержку Workers, которые могут запускаться в любом процессе. ( Iaf200 )
Добавлен
RemoteCoroutineWorker
, который является реализациейRemoteListenableWorker
и может привязываться к удаленному процессу. ( I30578 )
Изменения API
- Добавлена поддержка сетевого ограничения
TEMPORARILY_UNMETERED
. ( I08d5e ) - Поддержка многопроцессного рабочего процесса для
setProgressAsync()
. ( Ib6d08 ) - Сделайте
WorkManagerInitializer
публичным, чтобы другиеandroidx.startup.Initializer
могли использовать их в качестве зависимостей. ( I5ab11 )
Версия 2.6.0-альфа01
24 марта 2021 г.
Выпущена версия androidx.work:work-*:2.6.0-alpha01
. Версия 2.6.0-alpha01 содержит следующие коммиты.
Новые функции
WorkManager
теперь используетandroidx.startup
для инициализации WorkManager. Ранее это делалandroidx.work.impl.WorkManagerInitializer
. ( aosp/1608813 )Если ранее вы использовали
tools:node="remove"
ContentProvider
, используемый для инициализации жизненного цикла процесса, то вам необходимо сделать следующее.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.impl.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(или)
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Изменения API
- Добавьте API
Result.getOutputData()
, который возвращаетoutputData
ListenableWorker. ( Ie51e3 )
Исправления ошибок
- Добавить обходной путь для ошибки OEM, которая приводит к возникновению исключения
SecurityException
при использовании APIAlarmManager
. ( aosp/1587518 )
Версия 2.5.0
Версия 2.5.0
27 января 2021 г.
Выпущен androidx.work:work-*:2.5.0
. Версия 2.5.0 содержит следующие коммиты.
Основные изменения по сравнению с версией 2.4.0
- Новый артефакт
:work:work-multiprocess
для приложений, использующих несколько процессов. Он обеспечивает повышение производительности за счёт объединения планирования рабочих запросов в один процесс.- Чтобы использовать
work-multiprocess
, определите зависимость от:implementation "androidx.work:work-multiprocess:2.5.0"
- Назначьте основной процесс с помощью Configuration.Builder.setDefaultProcessName(String) .
- При использовании
work-multiprocess
также рекомендуется использовать RemoteWorkManager для управления запросамиWorkRequest
. RemoteWorkManager всегда обращается к назначенному процессу. Внутрипроцессный планировщик также выполняется в назначенном процессе.
- Чтобы использовать
- Иногда
ActivityManager
не может создать экземплярJobService
для запуска задания. Это приводит к тому, что базовое задание автоматически прекращается из-за ошибки платформы.WorkManager
теперь гарантирует наличие резервных заданий для каждого отдельногоWorkRequest
при инициализацииApplication
путем согласования заданий. Это значительно повышает надежность выполнения работ. ( б/172475041 , аосп/1489577 ) -
WorkManager
ограничивает рост базы данных за счет сокращения продолжительности буфера, который отслеживаетсяWorkRequest
после завершенияWorkRequest
. Ранее срок был7
дней. Он был сокращен до1
дня + продолжительность KeepResultsForAtLeast . ( аосп/1419708 ) -
TestListenableWorkerBuilder
теперь поддерживает конкретизированный класс, расширяющийListenableWorker
, чтобы упростить тестирование. ( аосп/1443299 , б/169787349 ) - Инспектор WorkManager теперь доступен при использовании Android Studio Arctic Fox.
Версия 2.5.0-rc01
13 января 2021 г.
androidx.work:work-*:2.5.0-rc01
выпущен. Версия 2.5.0-rc01 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка, из-за которой
getWorkInfosLiveData
не становилась недействительной после обновления сущностей при использовании API на основеWorkQuery
. ( аосп/1540566 , б/173769028 ) - Исправлена ошибка, из-за которой транзакции базы данных в некоторых редких случаях не отмечались как успешные. Это вызывает проблемы на некоторых устройствах Motorola. ( аосп/1535368 , б/175944460 )
- Исправлена ошибка игнорирования
NoSuchElementException
при попытке отвязаться от мертвого процесса. ( аосп/1530589 ) - Улучшите
ConstraintTrackingWorker
, чтобы он останавливалListenableWorker
только в том случае, если он еще не был остановлен. ( аосп/1496844 , б/172946965 ) - Обновите библиотеки androidx.work для поддержки Java 8 ( Ibd2f2 ).
Версия 2.5.0-бета02
2 декабря 2020 г.
Выпущен androidx.work:work-*:2.5.0-beta02
. Версия 2.5.0-beta02 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка в
androidx.work:work-multiprocess
, из-за которой WorkManager случайно блокировал вызывающий поток при попытке привязаться к назначенному процессу. ( аосп/1475538 ) - Исправлена ошибка, из-за которой
PeriodicWorkRequest
не согласовывались правильно. ( б/172475041 , аосп/1489577 ) - Добавлен обходной путь для ошибки платформы при остановке службы переднего плана при использовании API-интерфейсов
setForeground*
. ( б/170924044 , аосп/1489901 )
Версия 2.5.0-бета01
28 октября 2020 г.
Выпущен androidx.work:work-*:2.5.0-beta01
. Версия 2.5.0-beta01 содержит эти коммиты.
Новые функции
-
WorkManager
автоматически регулирует количествоWorkRequest
, которое может быть обработано внутрипроцессным планировщиком. Запросы по-прежнему выполняются в порядке FIFO. ( аосп/1455228 ) -
WorkManager
пытается выполнить восстановление, если хранилище данных приложения находится в плохом состоянии. ( аосп/1463103 )
Исправления ошибок
- Когда
ListenableWorker
прерывается, немедленно пометьте ихENQUEUED
, чтобы их можно было впоследствии перепланировать. ( аосп/1455618 , б/170273988 )
Версия 2.5.0-альфа03
14 октября 2020 г.
Выпущен androidx.work:work-*:2.5.0-alpha03
. Версия 2.5.0-alpha03 содержит эти коммиты.
Изменения API
-
TestListenableWorkerBuilder
иTestWorkerBuilder
не используют необработанные типы. ( I883ad , б/169787349 )
Исправления ошибок
- Используйте
ApplicationInfo
, чтобы определить имя процесса приложения по умолчанию. ( б/168716641 , аосп/1429950 ) - Исправьте правила видимости для
RemoteWorkManager
иRemoteWorkContinuation
. Эти API больше не помечаются как@Restricted
. ( аосп/1432091 ) - Исправьте правила proguard для
:work:work-multiprocess
. ( аосп/1432091 ) - Улучшите жизненные циклы уведомлений для длительной работы, привязанной к приоритетной службе. ( б/168502234 , аосп/1431331 )
Версия 2.5.0-альфа02
16 сентября 2020 г.
Выпущен androidx.work:work-*:2.5.0-alpha02
. Версия 2.5.0-alpha02 содержит эти коммиты.
Новые функции
- Добавьте API в WorkQuery, чтобы иметь возможность использовать
id
для запросаWorkInfo
. ( аосп/1412372 , б/157335295 ) - WorkManager лучше поддерживает приложения, использующие несколько процессов, с новым артефактом (
androidx.work:work-multiprocess:*
). Этот новый артефакт помогает решить несколько проблем, с которыми сталкиваются большие приложения, в том числе:- Обычно WorkManager необходимо инициализировать в каждом процессе приложения. Это нехорошо, потому что возрастает конкуренция за SQLite, что, в свою очередь, вызывает другие проблемы. WorkManager теперь имеет новые API, которые можно использовать для обозначения основного процесса приложения с помощью
Configuration#setDefaultProcessName(processName)
.processName
— это полное имя процесса, которое выглядит какpackageName:processName
(напримерcom.example:remote
). - Набор новых API:
RemoteWorkManager
иRemoteWorkContinuation
дляenqueue
,cancel
иquery
рабочих запросов. Эти API не включают вариантыLiveData
, чтобы избежать конкуренции SQLite между несколькими процессами. Все вызовыenqueue
,cancel
иquery
перенаправляютсяprimary
процессу приложения с использованием AIDL и возвращают плавныйListenableFuture
. ( аосп/1392657 , аосп/1411210 , аосп/1412215 , аосп/1417713 )
- Обычно WorkManager необходимо инициализировать в каждом процессе приложения. Это нехорошо, потому что возрастает конкуренция за SQLite, что, в свою очередь, вызывает другие проблемы. WorkManager теперь имеет новые API, которые можно использовать для обозначения основного процесса приложения с помощью
Изменения API
- WorkManager теперь более агрессивно удаляет завершенные запросы
WorkRequest
, не имеющие неполных зависимостей. Продолжительность буфера изменилась с7
дней до1
дня. ( аосп/1419708 )
Исправления ошибок
- WorkManager теперь заранее согласовывает задания, поэтому задания
WorkRequest
иJobScheduler
синхронизируются при инициализацииWorkManager
. ( аосп/1412794 , б/166292069 )
Версия 2.5.0-альфа01
19 августа 2020 г.
androidx.work:work-*:2.5.0-alpha01
выпущен. Версия 2.5.0-alpha01 содержит эти коммиты.
Новые функции
- Изменения во внутренних API, которые позволят нам улучшить инструменты
WorkManager
в будущем. Следите за дополнительными обновлениями.
Исправления ошибок
- Обрабатывать
SecurityException
при отслеживании состояния сети на некоторых устройствах. ( аосп/1396969 )
Внешний вклад
- Исправление документации для
ArrayCreatingInputMerger
от Зака Свирса ( github/43 ).
Версия 2.4.0
Версия 2.4.0
22 июля 2020 г.
Выпущен androidx.work:work-*:2.4.0
. Версия 2.4.0 содержит эти коммиты.
Основные изменения с версии 2.3.0
- Внутренний планировщик
WorkManager
теперь стал более функциональным. РаньшеScheduler
в процессе рассматривал только выполнение работы, которая не была отложена и ограничения которой были соблюдены. Теперь планировщик в процессе отслеживаетWorkRequest
, которые могут быть выполнены в будущем, включая PeriodicWorkRequests. ВнутрипроцессныйScheduler
также не соблюдает ограничения планирования (но все еще ограничен размеромExecutor
используемого WorkManager). Это означает, что приложение теперь может выполнять гораздо больше рабочих запросов, когда оно находится на переднем плане. Для управления выполнением отложенной работы на переднем планеWorkManager
также представляет новый настраиваемыйRunnableScheduler
. ( аосп/1185778 ) - WorkManager теперь поддерживает RxJava 3. Чтобы использовать RxJava 3, необходимо включить следующую зависимость:
implementation "androidx.work:work-rxjava3:2.4.0"
. ( аосп/1277904 ) - Добавлена возможность запроса
WorkInfo
с помощьюWorkQuery
. Это полезно, когда разработчики хотят запроситьWorkInfo
по комбинации нескольких атрибутов. Для получения дополнительной информации см.WorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
илиWorkQuery.Builder.fromUniqueWorkNames(...)
. ( аосп/1253230 , б/143847546 ) Добавьте возможность запрашивать диагностическую информацию из
WorkManager
, используя:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
Это дает много полезной информации, включая:
- WorkRequests, выполненные за последние 24 часа.
- WorkRequests, которые в данный момент ВЫПОЛНЯЮТСЯ.
- Запланированные рабочие запросы. ( аосп/1235501 )
Добавьте
ExistingWorkPolicy.APPEND_OR_REPLACE
, который похож наAPPEND
, но заменяет цепочку, в которой были отменены или не выполнены предварительные условия. ( б/134613984 , аосп/1199640 )Предоставьте возможность добавлять собственный
RunnableScheduler
для отслеживания WorkRequests, которые необходимо выполнить в будущем. Это используется внутрипроцессным планировщиком. ( аосп/1203944 )Добавьте поддержку динамического добавления фабрик для делегирования при использовании
DelegatingWorkerFactory
. ( б/156289105 , аосп/1309745 )Более тесно согласуйте отслеживание ограничений
BATTERY_NOT_LOW
с платформой. ( аосп/1312583 )Внутрипроцессный планировщик теперь использует улучшенные API для определения имени процесса. Это полезно для лучшей поддержки приложений, использующих несколько процессов. ( аосп/1324732 )
Новые правила Lint, которые обеспечивают:
- Использование правильного типа
foregroundServiceType
при использовании API-интерфейсовsetForegroundAsync()
. ( б/147873061 , аосп/1215915 ) - Указание идентификаторов JobScheduler, которые WorkManager должен использовать при непосредственном использовании API JobService. аосп/1223567
- Добавлено новое правило проверки, которое гарантирует, что реализации
ListenableWorker
теперь станутpublic
при использованииWorkerFactory
по умолчанию. ( аосп/1291262 )
- Использование правильного типа
Вызовы
setForegroundAsync()
, которые не завершаются до завершенияListenableWorker
, теперь будут сигнализироваться черезIllegalStateException
в возвращенномListenableFuture
. ( аосп/1262743 )Исправлена ошибка, из-за которой служба
ForegroundService
не останавливалась после прерыванияWorker
переднего плана. ( б/155579898 , аосп/1302153 )Исправлена ошибка, из-за которой
WorkManager
пытается выполнить несколько экземпляровWorker
, привязанного к службе переднего плана ( b/156310133 , aosp/1309853 ).
Версия 2.4.0-rc01
24 июня 2020 г.
androidx.work:work-*:2.4.0-rc01
выпущен. Версия 2.4.0-rc01 содержит эти коммиты.
Исправления ошибок
- Внутрипроцессный планировщик теперь использует улучшенные API для определения имени процесса. Это полезно для лучшей поддержки приложений, использующих несколько процессов. ( аосп/1324732 )
Версия 2.4.0-бета01
20 мая 2020 г.
androidx.work:work-gcm:2.4.0-beta01
, androidx.work:work-runtime:2.4.0-beta01
, androidx.work:work-runtime-ktx:2.4.0-beta01
, androidx.work:work-rxjava2:2.4.0-beta01
, и androidx.work:work-testing:2.4.0-beta01
выпущены. Версия 2.4.0-beta01 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка, из-за которой служба
ForegroundService
не останавливалась после прерыванияWorker
переднего плана. ( б/155579898 , аосп/1302153 ) - Исправлена ошибка, из-за которой
WorkManager
пытается выполнить несколько экземпляровWorker
, привязанного к службе переднего плана ( b/156310133 , aosp/1309853 ). - Добавьте поддержку динамического добавления фабрик для делегирования при использовании
DelegatingWorkerFactory
. ( б/156289105 , аосп/1309745 ) - Более тесно согласуйте отслеживание ограничений
BATTERY_NOT_LOW
с платформой. ( аосп/1312583 )
Версия 2.4.0-альфа03
29 апреля 2020 г.
Выпущен androidx.work:work-*:2.4.0-alpha03
. Версия 2.4.0-alpha03 содержит эти коммиты.
Новые функции
- WorkManager теперь поддерживает RxJava 3. Чтобы использовать RxJava 3, необходимо включить следующую зависимость:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
. ( аосп/1277904 ) - Добавлено новое правило проверки, которое гарантирует, что реализации
ListenableWorker
теперь станутpublic
при использованииWorkerFactory
по умолчанию. ( аосп/1291262 )
Изменения API
- Вызов
setProgressAsync()
после завершения выполненияListenableWorker
теперь будет сигнализировать обException
черезListenableFuture
. ( аосп/1285494 ) -
WorkQuery.Builder
теперь помечен какfinal
. ( аосп/1275037 ) - Фабричные методы
WorkQuery.Builder
withStates
,withTags
иwithUniqueWorkNames
были переименованы вfromStates
,fromTags
иfromUniqueWorkNames
соответственно. ( аосп/1280287 )
Исправления ошибок
- Игнорировать
SecurityException
при отслеживании состояния сети устройства. ( б/153246136 , аосп/1280813 )
Версия 2.4.0-альфа02
1 апреля 2020 г.
androidx.work:work-*:2.4.0-alpha02
выпущен. Версия 2.4.0-alpha02 содержит эти коммиты.
Новые функции
- Добавлено новое правило Lint, которое предупреждает, когда
WorkRequest
требует какConstraints.setRequiresCharging(...)
, так иConstraints.setRequiresDeviceIdle(...)
. Некоторые устройства никогда не заряжаются и не простаивают одновременно. Таким образом, такие запросы будут выполняться реже, чем ожидалось. ( аосп/1253840 )
Изменения API
Добавлена возможность запроса
WorkInfo
с помощьюWorkQuery
. Это полезно, когда разработчики хотят запроситьWorkInfo
по комбинации нескольких атрибутов. Для получения дополнительной информации смWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
илиWorkQuery.Builder withUniqueWorkNames(...)
. ( аосп/1253230 , б/143847546 )Вызовы
setForegroundAsync()
, которые не завершаются до завершенияListenableWorker
, теперь будут сигнализироваться черезIllegalStateException
в возвращенномListenableFuture
. ( аосп/1262743 )
Исправления ошибок
- Исправлено правило проверки, которое проверяет недопустимую длительность интервала для
PeriodicWorkRequest
s. ( аосп/1254846 , б/152606442 )
Версия 2.4.0-альфа01
4 марта 2020 г.
androidx.work:work-*:2.4.0-alpha01
выпущен. Версия 2.4.0-alpha01 содержит эти коммиты.
Новые функции
Внутренний планировщик
WorkManager
теперь стал более функциональным. Раньше планировщик в процессе рассматривал только выполнение работы, которая не была отложена и ограничения которой были соблюдены. Теперь внутрипроцессный планировщик отслеживаетWorkRequest
, которые могут быть выполнены в будущем, включаяPeriodicWorkRequest
. Внутрипроцессный планировщик также не соблюдает ограничения планирования (но все еще ограничен размеромExecutor
используемого WorkManager). Это означает, что приложение теперь может выполнять гораздо большеWorkRequest
, когда приложение находится на переднем плане. ( аосп/1185778 )Добавлена возможность запрашивать диагностическую информацию из WorkManager с помощью
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Это дает много полезной информации, включая:- WorkRequests, выполненные за последние 24 часа.
- WorkRequests, которые в данный момент ВЫПОЛНЯЮТСЯ.
- Запланированные рабочие запросы. ( аосп/1235501 )
Новые правила Lint, которые обеспечивают:
- Использование правильного типа
foregroundServiceType
при использовании API-интерфейсовsetForegroundAsync()
. ( б/147873061 , аосп/1215915 ) - Указание идентификаторов
JobScheduler
, которыеWorkManager
должен использовать при непосредственном использовании APIJobService
. ( аосп/1223567 )
- Использование правильного типа
Изменения API
Добавьте
ExistingWorkPolicy.APPEND_OR_REPLACE
, который похож наAPPEND
, но заменяет цепочку, в которой были отменены или не выполнены предварительные условия. ( б/134613984 , аосп/1199640 )Предоставьте возможность добавлять собственный
RunnableScheduler
для отслеживанияWorkRequest
, которые необходимо выполнить в будущем. Это используется внутрипроцессным планировщиком. ( аосп/1203944 )
Исправления ошибок
-
setProgress()
устарела вRxWorker
поскольку ранее она возвращалаSingle<Void>
, который является невозможным типом. Добавлен новый APIsetCompletableProgress()
, который вместо этого возвращаетCompletable
; и добавлены новые правила Lint, которые помогают перейти на новые API. ( б/150080946 , аосп/1242665 )
Версия 2.3.4
Версия 2.3.4
18 марта 2020 г.
Выпущен androidx.work:work-*:2.3.4
. Версия 2.3.4 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка, из-за которой запускалось несколько экземпляров долго работающего
Worker
после превышения 10-минутного окна выполнения. ( аосп/1247484 , б/150553353 ) - Исправление ошибки
IssueRegistry
в WorkManager. Спасибо @ZacSweers из Slack за вклад. ( аосп/1217923 )
Версия 2.3.3
Версия 2.3.3
4 марта 2020 г.
Выпущен androidx.work:work-*:2.3.3
. Версия 2.3.3 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка, из-за которой если
Worker
был прерван, его расписание не переназначалось правильно. ( б/150325687 , аосп/1246571 )
Версия 2.3.2
Версия 2.3.2
19 февраля 2020 г.
androidx.work:work-*:2.3.2
выпущены. Версия 2.3.2 содержит эти коммиты.
Исправления ошибок
- Устранена проблема, из-за которой WorkManager в редких случаях превышал лимит в 100 заданий в JobScheduler. ( аосп/1226859 , б/149092520 )
- Исправлено состояние гонки в ConstraintControllers. ( аосп/1220100 )
- Улучшен жизненный цикл службы на переднем плане управления для долго работающих рабочих процессов. ( аосп/1226295 )
- Улучшено управление отменой уведомлений для длительно работающих рабочих процессов при отмене рабочего процесса. ( аосп/1228346 )
Версия 2.3.1
Версия 2.3.1
5 февраля 2020 г.
androidx.work:work-*:2.3.1
выпущен. Версия 2.3.1 содержит эти коммиты .
Исправления ошибок
- Лучше управляйте жизненным циклом
Notification
для длительно работающихWorker
, которые запускаются, когда активнаService
переднего плана. ( аосп/1218539 , б/147249312 ) -
WorkManager
теперь зависит от стабильной версииandroidx.sqlite:sqlite-framework:2.1.0
. ( аосп/1217729 ) - Добавлены правила проверки, гарантирующие, что
foregroundServiceType
указан вAndroidManifest.xml
при использованииforegroundServiceType
вForegroundInfo
. ( аосп/1214207 , б/147873061 )
Версия 2.3.0
Версия 2.3.0
22 января 2020 г.
androidx.work:work-*:2.3.0
выпущен без изменений с 2.3.0-rc01
. Версия 2.3.0 содержит эти коммиты .
Важные изменения с версии 2.2.0
- Поддержка длительной или важной работы через
ListenableWorker#setForegroundAsync()
. - Поддержка прогресса работника через
ListenableWorker#setProgressAsync()
. - WorkManager теперь включает в себя дополнительные правила проверки как часть библиотеки, что помогает обнаруживать ошибки на ранней стадии.
Версия 2.3.0-rc01
8 января 2020 г.
androidx.work:work-*:2.3.0-rc01
выпущен. Версия 2.3.0-rc01 содержит эти коммиты .
Этот выпуск идентичен 2.3.0-beta02
Исправления ошибок
- Артефакт
work-testing
теперь определяет зависимостьapi
отwork-runtime-ktx
. ( аосп/1194410 )
Версия 2.3.0-бета02
18 декабря 2019 г.
Выпущен androidx.work:work-*:2.3.0-beta02
. Версия 2.3.0-beta02 содержит эти коммиты .
Новые функции
- Добавлено улучшенное сообщение об ошибке для невосстанавливаемых исключений SQLite. ( аосп/1185777 )
- Добавлено правило проверки, которое гарантирует удаление поставщика контента
androidx.work.impl.WorkManagerInitializer
изAndroidManifest.xml
при использовании инициализации по требованию. ( аосп/1167007 ) - Добавлено предупреждение о вине, когда
enqueue()
используется дляPeriodicWorkRequest
вместоenqueueUniquePeriodicWork()
. ( аосп/1166032 )
Изменения API
-
ForegroundInfo
теперь требует, чтобы вы указалиnotificationId
, который будет использоваться при использованииListenableWorker.setForegroundAsync()
. Это кардинальное изменение. Это позволяет вам запускать несколько долго работающихWorker
параллельно.WorkManager
также лучше управляет временем жизни предоставленныхNotification
. ( б/145473554 , аосп/1181208 , asop/1181216 , asop/1183577 )
Исправления ошибок
- Исправлена ошибка в реализации AlarmManager, из-за которой сигналы тревоги не очищались должным образом. ( аосп/1156444 )
- Исправлена ошибка, из-за которой пустой список
WorkRequest
приводил к построению неправильной цепочкиWorkContinuation
. ( б/142835274 , аосп/1157051 )
Изменения зависимостей
- WorkManager теперь использует комнату 2.2.2.
Версия 2.3.0-бета01
20 ноября 2019 г.
androidx.work:work-*:2.3.0-beta01
выпущен. Версия 2.3.0-beta01 содержит эти коммиты .
Новые функции
- Добавлено новое правило проверки, которое предотвращает ошибки разработчика из-за неправильной реализации
androidx.work.Configuration.Provider
при использовании инициализации по требованию. аосп/1164559
Версия 2.3.0-альфа03
23 октября 2019 г.
androidx.work:work-*:2.3.0-alpha03
выпущен. Версия 2.3.0-alpha03 содержит эти коммиты .
Новые функции
- Добавлен API
WorkManager.createCancelPendingIntent()
, который позволяет легко отменитьWorkRequest
без необходимости регистрации другого компонента вAndroidManifest.xml
. Этот API позволяет особенно легко отменитьWorkRequest
изNotification
. Мы ожидаем, что это будет связано с новыми API-интерфейсами переднего плана в версии 2.3.0. - WorkManager теперь зависит от стабильной версии
androidx.room:*:2.2.0
.
Изменения API
-
ForegroundInfo.getNotificationType()
переименован вForegroundInfo.getForegroundServiceType()
чтобы обеспечить большее соответствие API базовой платформы. ( б/142729893 , аосп/1143316 )
Исправления ошибок
- Исправлена ошибка, вызванная ненужным вызовом
setTransactionSuccessful()
вне транзакции. Это происходит для редких миграций. ( б/142580433 , аосп/1141737 )
Версия 2.3.0-альфа02
9 октября 2019 г.
Выпущен androidx.work:work-*:2.3.0-alpha02
. Версия 2.3.0-alpha02 содержит эти коммиты .
Новые функции
- WorkManager теперь поддерживает выполнение длительной или важной работы, которая должна поддерживаться ОС. Для получения дополнительной информации посмотрите
ListenableWorker#setForegroundAsync()
(илиCoroutineWorker#setForeground()
для Kotlin). ( аосп/1133636 )
Изменения API
- API
containsKey
вData
переименован вhasKeyWithValueOfType
. Соответствующий метод расширения в библиотекеktx
также был переименован. ( б / 141916545 )
Исправления ошибок
- Расписания WorkManager работают корректно, когда количество запросов
WorkRequest
в очереди приближается к пределу планирования . ( аосп/1105766 ) - WorkManager вызывает
ListenableWorker#onStopped()
только в том случае, если работа еще не завершена. ( б / 140055777 ) - WorkManager теперь удаляет информацию о ходе выполнения, когда рабочий процесс прерывается или достигает конечного состояния. ( аосп/1114572 )
-
Data
теперь имеют гораздо более полезное представлениеtoString()
. ( б / 140945323 ) -
Data
теперь имеют улучшенный методequals()
. Он также поддерживаетdeepEquals
для типовArray
. ( б / 140922528 ) - WorkManager теперь хранит свою внутреннюю базу данных и файлы настроек в каталоге, в котором нет резервных копий. ( б / 114808216 )
Версия 2.3.0-альфа01
22 августа 2019 г.
androidx.work:work-*:2.3.September 5, 20190-alpha01
выпущен. Коммиты, включенные в эту версию, можно найти здесь .
Новые функции
-
ListenableWorker
теперь может устанавливать прогресс через APIsetProgressAsync()
. Также добавлен соответствующий APIsuspend
-ingsetProgress
вCoroutineWorker
иsetProgress
вRxWorker
, который возвращаетSingle<Void>
. С помощью этих новых API-интерфейсов работники могут передавать информацию о ходе работы черезWorkInfo
, у которого есть соответствующий APIgetProgress
. ( б / 79481554 ) -
Data
имеет APIcontainsKey()
, который можно использовать для проверки того, что входные данные дляWorker
имеют ключи ожидаемого типа. ( б / 117136838 ) -
Data
теперь можно сериализовать с помощьюData.toByteArray()
иData.fromByteArray()
. Обратите внимание, что дляData
не существует никаких гарантий управления версиями, поэтому вам не следует сохранять их или использовать для IPC между приложениями. Их безопасно использовать только между несколькими процессами одного приложения. - Добавлена возможность указать
InputMergerFactory
черезConfiguration.setInputMergerFactory
. ( б / 133273159 )
Изменения API
- WorkManager выдаст экземпляр
IllegalStateException
, еслиWorkerFactory
возвращает экземплярListenableWorker
, который был вызван ранее. ( б / 139554406 ) - Обновления документации, касающиеся отмены
ListenableFuture
и обратного вызоваonStopped()
вListenableWorker
. ( б / 138413671 )
Исправления ошибок
- Внутрипроцессный планировщик теперь игнорирует
WorkRequest
с ограничениемidle
. Эти запросы теперь обрабатываютсяJobScheduler
только тогда, когда устройство фактическиidle
. ( аосп/1089779 ) -
TestScheduler
теперь правильно использует указанныйExecutor
в качестве внутреннего исполнителя задач в тестах. ( аосп/1090749 )
Версия 2.2.0
Версия 2.2.0
15 августа 2019 г.
Выпущен androidx.work:work-*:2.2.0
. Коммиты, включенные в эту версию, можно найти здесь .
Этот выпуск идентичен androidx.work:work-*:2.2.0-rc01
.
Важные изменения в версии 2.2.0 по сравнению с версией 2.1.0
androidx.work:work-gcm:2.2.0
— это новый артефакт Maven, который поддерживает использование GCMNetworkManager в качестве планировщика, когда Сервисы Google Play доступны для уровней API <= 22. Это необязательная зависимость, которая помогает обеспечить более надежную и производительную фоновую обработку в старых версиях API. Если ваше приложение использует сервисы Google Play, добавьте эту зависимость в файл gradle, чтобы автоматически получить поддержку GCMNetworkManager. Если службы Play Services недоступны, WorkManager продолжит использовать AlarmManager на старых устройствах.
Версия 2.2.0-rc01
30 июля 2019 г.
androidx.work:work-*:2.2.0-rc01
выпущен. Коммиты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Исправлена ошибка в реализации AlarmManager, которая приводила к преждевременному завершению работы службы и в редких случаях приводила к исключению
RejectedExecutionException
. ( аосп/1092374 ) ( б/138238197 ). - Добавлен обходной путь для исключения
NullPointerException
при использовании APIJobScheduler
на некоторых устройствах. ( aosp/1091020 ) ( б/138364061 ), ( б/138441699 )
Версия 2.2.0-бета02
19 июля 2019 г.
androidx.work:work-*:2.2.0-beta02
выпущен. Коммиты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Удалена непреднамеренная зависимость jacoco, которая появилась в
2.2.0-beta01
.
Версия 2.2.0-бета01
17 июля 2019 г.
androidx.work:work-*:2.2.0-beta01
выпущен. Коммиты, включенные в эту версию, можно найти здесь .
Новые функции
-
androidx.work:work-gcm:2.2.0-beta01
— это новый артефакт Maven, который поддерживает использование GCMNetworkManager в качестве планировщика, когда Сервисы Google Play доступны для уровней API <= 22. Это необязательная зависимость, которая помогает обеспечить более надежную и производительную фоновую обработку на старых версиях API. Если ваше приложение использует сервисы Google Play, добавьте эту зависимость в файл gradle, чтобы автоматически получить поддержку GCMNetworkManager. Если службы Play Services недоступны, WorkManager продолжит использовать AlarmManager на старых устройствах.
Исправления ошибок
- Исправлена ошибка
IllegalArgumentException
при отслеживании состояния сети на планшетах Nvidia Shield K1. ( аосп/1010188 )
Версия 2.1.0
Версия 2.1.0
11 июля 2019 г.
Выпущен androidx.work:work-*:2.1.0
. Этот выпуск идентичен androidx.work:work-*:2.1.0-rc01
.
Важные изменения с версии 2.0.1
-
work-runtime-ktx
теперь требует Java 8. Если у вас возникнут какие-либо проблемы, вы можете добавить в свойbuild.gradle
следующее:kotlinOptions { jvmTarget = "1.8" }
- Добавлена инициализация WorkManager по требованию, при которой WorkManager будет создан только при наличии ссылки. b/127497100 Чтобы настроить проект для инициализации по требованию:
- Отключите автоматический инициализатор .
- Реализуйте
Configuration.Provider
в своем пользовательском объектеApplication
. - Измените все ссылки
WorkManager.getInstance()
наWorkManager.getInstance(Context)
. В рамках этого изменения мы объявили устаревшимWorkManager.getInstance()
. Всегда безопаснее вызвать новую заменуWorkManager.getInstance(Context)
, даже если вы не выполняете инициализацию по требованию.
-
PeriodicWorkRequest
теперь поддерживает начальные задержки. Вы можете использовать методsetInitialDelay
вPeriodicWorkRequest.Builder
, чтобы установить начальную задержку. б/111404867 - Добавлена возможность делегирования одному или нескольким зарегистрированным
WorkerFactory
с помощьюDelegatingWorkerFactory
. б/131435993 - Добавлена возможность настройки
Executor
, используемого WorkManager для всей внутренней бухгалтерии, черезConfiguration.Builder.setTaskExecutor
. - Добавлена возможность создавать доступные для модульного тестирования классы
Worker
иListenableWorker
с помощьюTestWorkerBuilder
иTestListenableWorkerBuilder
в артефактеwork-testing
.- Обратите внимание, что
work-testing
теперь использует Kotlin в качестве зависимости и по умолчанию включает несколько расширений Kotlin.
- Обратите внимание, что
- В
WorkInfo
добавлен счетчик попыток запуска. б/127290461 - Типы
Data
теперь могут хранить и извлекать байты и массивы байтов. Это НЕ меняет максимальный размер объектовData
. - WorkManager теперь зависит от
Room 2.1.0
, что должно исправить некоторые проблемы с базой данных.
Версия 2.1.0-rc01
27 июня 2019 г.
androidx.work:work-*:2.1.0-rc01
выпущен. Коммиты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Исправлена ошибка, приводившая к сбою приложения при выполнении заданий с помощью
JobScheduler
во время резервного копирования b/135858602 .
Версия 2.1.0-бета02
20 июня 2019 г.
Выпущен androidx.work:work-*:2.1.0-beta02
. Коммиты, включенные в эту версию, можно найти здесь .
Исправления ошибок
-
TestListenableWorkerBuilder
теперь использует правильнуюWorkerFactory
при создании экземпляровListenableWorker
. б/135275844 - Исправлена ошибка, приводившая к смещению окон выполнения
WorkRequest
из-за смерти процесса. б/135272196
Версия 2.1.0-бета01
13 июня 2019 г.
Выпущен androidx.work:work-*:2.1.0-beta01
. Коммиты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- WorkManager теперь зависит от
Room 2.1.0
, что должно исправить некоторые проблемы с базой данных. - Удалены некоторые операции ввода-вывода с загрузочного диска в основном потоке.
- Исправлен потенциальный тупик при отслеживании ограничений. б/134361006
- Превентивно отменены недопустимые задания, приписываемые WorkManager. б/134058261
- Добавлено несколько защитных вызовов к API JobScheduler для некорректно работающих устройств.
Версия 2.1.0-альфа03
5 июня 2019 г.
Выпущен androidx.work:*:2.1.0-alpha03
.
Исправления ошибок
- Улучшена документация для
PeriodicWorkRequest
. -
WorkManagerTestInitHelper
теперь использует правильный фоновый исполнитель для тестов. - Исправлены проблемы SQLite при работе с большими транзакциями на некоторых устройствах. ( б / 130182503 )
- Зависимости WorkManager теперь более детализированы. ( р/133169148 ).
- Обход ошибок, характерных для OEM-производителей, в реализации
JobScheduler
при планировании заданий с помощью WorkManager. - Улучшения в планировщике на основе AlarmManager в отношении сроков службы, которые ранее вызывали редкие сбои. ( б / 133313734 )
Версия 2.1.0-альфа02
16 мая 2019 г.
Выпущен WorkManager 2.1.0-alpha02. Эта версия содержит несколько новых API.
Изменения API
PeriodicWorkRequest
теперь поддерживает начальные задержки. Вы можете использовать методsetInitialDelay
вPeriodicWorkRequest.Builder
, чтобы установить начальную задержку. б/111404867Добавлена возможность делегирования одному или нескольким зарегистрированным
WorkerFactory
с помощьюDelegatingWorkerFactory
. б/131435993Добавлена возможность настройки
Executor
, используемого WorkManager для всей внутренней бухгалтерии, черезConfiguration.Builder.setTaskExecutor
.Улучшена документация по
WorkRequest.keepResultsForAtLeast
( b/130638001 ), инициализации по требованию иPeriodicWorkRequest.Builder
( b/131711394 ).
Версия 2.1.0-альфа01
24 апреля 2019 г.
Выпущен WorkManager 2.1.0-alpha01. Эта версия содержит несколько новых API. Обратите внимание, что начиная с этой версии появятся новые функции, которые не будут перенесены в версию 1.x. Мы рекомендуем перейти на 2.x.
Изменения API
- Добавлена инициализация WorkManager по требованию, при которой WorkManager будет создан только при наличии ссылки. b/127497100 Чтобы настроить проект для инициализации по требованию:
- Отключите автоматический инициализатор .
- Реализуйте
Configuration.Provider
в своем пользовательском объектеApplication
. - Измените все ссылки
WorkManager.getInstance()
наWorkManager.getInstance(Context)
. В рамках этого изменения мы объявили устаревшимWorkManager.getInstance()
. Всегда безопаснее вызвать новую заменуWorkManager.getInstance(Context)
, даже если вы не выполняете инициализацию по требованию.
- Добавлена возможность создавать доступные для модульного тестирования классы
Worker
иListenableWorker
с помощьюTestWorkerBuilder
иTestListenableWorkerBuilder
в артефактеwork-testing
.- Обратите внимание, что
work-testing
теперь использует Kotlin в качестве зависимости, но также по умолчанию включает несколько расширений Kotlin.
- Обратите внимание, что
- В
WorkInfo
добавлен счетчик попыток запуска. б/127290461 - Типы
Data
теперь могут хранить и извлекать байты и массивы байтов. Это НЕ меняет максимальный размер объектовData
. - Устаревший
CoroutineWorker.coroutineContext
. Это поле было неправильно введено какCoroutineDispatcher
; он вам больше не понадобится, поскольку вы можете самостоятельно перейти к нужному контексту сопрограммы в теле приостанавливающей функции. -
RxWorker.createWork()
иRxWorker.getBackgroundScheduler()
теперь помечены возвращаемыми типами@NonNull
.
Версия 2.0.1
Версия 2.0.1
9 апреля 2019 г.
Выпущен WorkManager 2.0.1. Этот выпуск идентичен версии 2.0.1-rc01 .
Версия 2.0.1-rc01
3 апреля 2019 г.
Выпущен WorkManager 2.0.1-rc01. Эта версия содержит некоторые исправления ошибок. Для пользователей устаревшей версии 1.x некоторые из этих изменений также появятся в версии 1.0.1-rc01 .
Исправления ошибок
- Робоэлектрические тесты теперь корректно работают с WorkManager. б/122553577
- Исправлен крайний сбой, из-за которого отслеживание ограничений не очищалось в API до версии JobScheduler. б/129226383
- Исправлена ошибка
StackOverflowError
, связанная с длинными цепочками работ. б/129091233 - Обновлена документация для
PeriodicWorkRequest
, чтобы указать, что гибкое время не поддерживается в API 23. - Исправлены некоторые неработающие ссылки в документации Kotlin.
Версия 2.0.0
Версия 2.0.0
20 марта 2019 г.
Выпущен WorkManager 2.0.0. Эта версия идентична 2.0.0-rc01 и является стабильной версией AndroidX 1.0.0 с зависимостями AndroidX. Мы рекомендуем ориентироваться на эту версию вместо устаревших версий 1.x. Вся активная разработка будет ориентирована на версию 2.x, а версия 1.x будет получать исправления критических ошибок только в течение ограниченного времени.
Версия 2.0.0-rc01
7 марта 2019 г.
Выпущен WorkManager 2.0.0-rc01. Эта версия идентична стабильной версии 1.0.0, но имеет зависимости от AndroidX. Как только она достигнет стабильной версии 2.0.0, вам следует включить эту версию, а в устаревших версиях 1.x будут исправлены только некоторые критические ошибки. Вся активная разработка будет ориентирована на версию 2.x.
Зависимости до AndroidX
Справочная документация: Java
Круто
dependencies { def work_version = "1.0.1" // (Java only) implementation "android.arch.work:work-runtime:$work_version" // Kotlin + coroutines implementation "android.arch.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "android.arch.work:work-rxjava2:$work_version" // optional - Test helpers androidTestImplementation "android.arch.work:work-testing:$work_version" }
Котлин
dependencies { val work_version = "1.0.1" // (Java only) implementation("android.arch.work:work-runtime:$work_version") // Kotlin + coroutines implementation("android.arch.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("android.arch.work:work-rxjava2:$work_version") // optional - Test helpers androidTestImplementation("android.arch.work:work-testing:$work_version") }
Версия 1.0.1
Версия 1.0.1
April 9, 2019
WorkManager 1.0.1 is released. This release is identical to 1.0.1-rc01 .
Please note that we strongly encourage users to update to WorkManager 2.x, as there will be very few updates to the 1.x branch moving forward. New APIs will also not be released for the 1.x library.
Version 1.0.1-rc01
2 апреля 2019 г.
WorkManager 1.0.1-rc01 is released. This version contains some bug fixes.
Исправления ошибок
- Robolectric tests now operate properly with WorkManager. b/122553577
- Fixed an edge case crash with constraints tracking not being cleaned up on pre-JobScheduler APIs. b/129226383
- Fixed a
StackOverflowError
dealing with long chains of work. b/129091233
Версия 1.0.0
Версия 1.0.0
March 05, 2019
This is WorkManager's 1.0.0 stable release. This version of WorkManager is identical to 1.0.0-rc02.
Version 1.0.0-rc02
February 21, 2019
This is the second release candidate for WorkManager's 1.0.0 stable release. This release contains two bug fixes.
Исправления ошибок
Worker
s are now correctly scheduled after an application crash. b/124546316Worker
s that throw an uncheckedException
are now correctly marked asFAILED
and no longer crash the app process.
Version 1.0.0-rc01
February 14, 2019
This is a release candidate for WorkManager's 1.0.0 stable release. This release contains one bug fix.
Исправления ошибок
- The AlarmManager based implementation now correctly respects
flex
windows for PeriodicWorkRequests. b/124274584
Version 1.0.0-beta05
February 6, 2019
This release contains some bug fixes.
Исправления ошибок
- Fixed a case where
JobScheduler.getPendingJob(...)
was used on API 23. b/123893059 - Fixed a
NullPointerException
on devices running Android 5.1 (API level 22) or lower. b/123835104
Version 1.0.0-beta04
February 4, 2019
This release contains some bug fixes.
Исправления ошибок
- Improved scheduling of PeriodicWork for the AlarmManager based implementation.
- Fixed a case where WorkManager failed to correctly track constraints when using the AlarmManager based implementation. b/123379508
- Fixed a case when WorkManager failed to retry work on process death when using the AlarmManager based implementation. b/123329850
- Fixed a case which would cause WorkManager to leak Wakelocks when using the AlarmManager based implementation.
Version 1.0.0-beta03
25 января 2019 г.
This release contains some bug fixes.
Исправления ошибок
- We introduced a regression
1.0.0-beta02
that was causing work to not execute properly in some situations. b/123211993 - Fixed a case where work wasn't properly honoring backoff timing. b/122881597
- Fixed a
ConcurrentModificationException
on devices running Android 5.1 (API or) or lower. This is a continuation of the fix in1.0.0-beta02
. b/121345393 - Added
exported=false
for some components in our manifest that were missing this annotation. - Included information about how WorkManager interacts with the OS in the package-level documentation.
Version 1.0.0-beta02
15 января 2019 г.
This release contains some bug fixes.
Исправления ошибок
- Fixed an edge case where periodic work could run more than once per interval on devices running Android 6.0 (API level 23). b/121998363
- Fixed a
ConcurrentModificationException
on devices running Android 5.1 (API level 22) or lower. b/121345393 - Fixed erroneous execution of work when Constraints aren't met on devices running Android 5.1 (API level 22) or lower. b/122578012
- Optimized work completion handling to be faster in some edge cases. b/122358129
- Added a change to address potential race conditions among multiple instances of
LiveData
that WorkManager uses. - Moved to use
Room
dependency1.1.1
instead of1.1.1-rc01
; these versions are identical. b/122578011
Version 1.0.0-beta01
19 декабря 2018 г.
This release contains no API changes; moving forward, WorkManager is expected to stay API stable until the next version unless there is a critical problem. This release contains some bug fixes.
Исправления ошибок
- Previously-cancelled children of successfully completed parent work will no longer run. b/120811767
- Properly initialized logging classes (primarily surfaced during tests).
Version 1.0.0-alpha13
December 12, 2018
This release contains a minor API change that will be helpful for some Kotlin users.
API Changes
-
androidx.work.Result
has been moved to be an inner class ofListenableWorker
. This prevents refactoring conflicts with Kotlin's top-levelResult
class. This is a breaking API change. b/120564418
Breaking API Changes
-
androidx.work.Result
has been moved to be an inner class ofListenableWorker
.
Version 1.0.0-alpha12
December 5, 2018
This release contains some breaking API changes; please see the Breaking API Changes section below. This version is likely to be released as our first beta. alpha12
also contains extensive documentation updates.
API Changes
- A new artifact,
work-rxjava2
, introducesRxWorker
. This is aListenableWorker
that expects aSingle<Payload>
. - Support for Firebase JobDispatcher has been removed because of its impending deprecation. This means that the
work-firebase
artifact will no longer be updated as we head into beta. We will be looking into adding an alternative in the future. - Combined
Payload
intoResult
.Result
is now a "sealed class" with three concrete implementations, which you can obtain viaResult.success()
(orResult.success(Data)
),Result.failure()
(orResult.failure(Data)
), andResult.retry()
. YourListenableFuture
s now resultResult
instead ofPayload
.Worker
s don't have getter and setter methods for outputData
. This is a breaking change. - Added
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
andConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
and variants to better support slow triggering content URIs. b/119919774 - Added
WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
variant. This method requires API 26. - Added
Operation.await()
andListenableFuture.await()
Kotlin extension methods. - Renamed
Operation.getException()
toOperation.getThrowable()
. This is a breaking change. - The
ContentUriTriggers
class and methods referencing it are no longer available for public usage. This is a breaking change. - Removed the rest of the varargs methods in
WorkManager
,WorkContinuation
, andOneTimeWorkRequest
to streamline the API. To fix any build problems, you can wrap your existing varargs withArrays.asList(...)
. We still include single-argument versions of each method. This is a breaking change. - Removed
WorkContinuation.combine(OneTimeWorkRequest, *)
variants. They were presenting a confusing API; the existingcombine
methods are more understandable. This is a breaking change.
Исправления ошибок
- Pre-Marshmallow implementations are now more reliable in recovering from process death of an already-executing task.
-
LiveData
that is observed viaobserveForever
is tracked via WorkManager. This is a backport of a Room library fix. b/74477406 -
Data.Builder.build()
now throws an exception if the serialized object exceeds its maximum size. This previously would only happen on a background thread where you couldn't properly handle it. - Further distinguished stopped vs. cancelled work;
getWorkInfoById()
will return aWorkInfo
with theCANCELLED
State
duringListenableWorker.onStopped()
. - Treat
null
Result
s as failures inListenableWorker
. b/120362353 - Speculative fix for Shield Tablets running API 24 that sometimes threw an
IllegalArgumentException
. b/119484416
Breaking API Changes
- Support for Firebase JobDispatcher has been removed because of its impending deprecation. This means that the
work-firebase
artifact will no longer be updated as we head into beta. We will be looking into adding an alternative in the future. - Combined
Payload
intoResult
.Result
is now a "sealed class" with three concrete implementations, which you can obtain viaResult.success()
(orResult.success(Data)
),Result.failure()
(orResult.failure(Data)
), andResult.retry()
. YourListenableFuture
s now resultResult
instead ofPayload
.Worker
s don't have getter and setter methods for outputData
. - Added
Operation.await()
andListenableFuture.await()
Kotlin extension methods. - Renamed
Operation.getException()
toOperation.getThrowable()
. - The
ContentUriTriggers
class and methods referencing it are no longer available for public usage. - Removed the rest of the varargs methods in
WorkManager
,WorkContinuation
, andOneTimeWorkRequest
to streamline the API. To fix any build problems, you can wrap your existing varargs withArrays.asList(...)
. We still include single-argument versions of each method. - Removed
WorkContinuation.combine(OneTimeWorkRequest, *)
variants. They were presenting a confusing API; the existingcombine
methods are more understandable.
Version 1.0.0-alpha11
November 8, 2018
This release contains many changes that will become stable API at beta
. There are breaking API changes in this release; please see the Breaking API Changes section below.
API Changes
-
work-runtime-ktx
introduces a newCoroutineWorker
. -
WorkStatus
has been renamed toWorkInfo
. All correspondinggetStatus
method variants have been renamed to the correspondinggetWorkInfo
variants. This is a breaking change. -
ListenableWorker.onStopped()
no longer accepts has a boolean argument representing if theWorkRequest
was cancelled.WorkManager
no longer makes this distinction. This is a breaking change. -
androidx.work.test
package has been renamed toandroidx.work.testing
package. This is a breaking change. - Setters on
Constraints
are no longer a part of the public API. This is a breaking change. -
WorkerParameters.getTriggeredContentUris()
andWorkerParameters.getTriggeredContentAuthorities()
previously returned arrays. Now these methods return Collections. This is a breaking change. -
ListenableWorker.onStartWork()
is renamed toListenableWorker.startWork()
. This is a breaking change. - The constructor for
WorkStatus
is no longer a part of the public API. This is a breaking change. -
Configuration.getMaxJobSchedulerID()
andConfiguration.getMinJobSchedulerID()
are renamed toConfiguration.getMinJobSchedulerId()
andConfiguration.getMaxJobSchedulerId()
respectively. This is a breaking change. - Added a lot of
@NonNull
annotations to the public API to improve ergonomics of the API. - Add
WorkManager.enqueueUniqueWork()
API to enqueue uniqueOneTimeWorkRequest
s without having to create aWorkContinuation
. - All variants of
enqueue
andcancel
methods onWorkManager
now return a newOperation
type. This is a breaking change. - All variants of
enqueue
no longer accept varargs forWorkRequest
s. This is a breaking change. Use Collections instead. You can useArrays.asList()
to modify existing code. We did this to reduce the API surface and method count. - Attempting to
initialize
WorkManager
more than once per process will now result in anIllegalStateException
. This is a breaking change.
Исправления ошибок
-
WorkRequest.Builder
s in thework-runtime-ktx
artifact now useListenableWorker
s. Fixes b/117666259 - Ensure the next run time for
PeriodicWork
is in the future. Fixes b/118204399 - Remove potential disk I/O when using WorkManager on app startup. Fixes b/117796731
- Fix a race condition in
WorkConstraintsTracker
. Fixes android-workmanager/issues/56
Breaking API Changes
-
WorkStatus
has been renamed toWorkInfo
. All correspondinggetStatus
method variants have been renamed to the correspondinggetWorkInfo
variants. -
ListenableWorker.onStopped()
no longer accepts has a boolean argument representing if theWorkRequest
was cancelled.WorkManager
no longer makes this distinction. -
androidx.work.test
package has been renamed toandroidx.work.testing
package. - Setters on
Constraints
are no longer a part of the public API. -
WorkerParameters.getTriggeredContentUris()
andWorkerParameters.getTriggeredContentAuthorities()
previously returned arrays. Now these methods return Collections. -
ListenableWorker.onStartWork()
is renamed toListenableWorker.startWork()
. - The constructor for
WorkStatus
is no longer a part of the public API. -
Configuration.getMaxJobSchedulerID()
andConfiguration.getMinJobSchedulerID()
are renamed toConfiguration.getMinJobSchedulerId()
andConfiguration.getMaxJobSchedulerId()
respectively. - All variants of
enqueue
andcancel
methods onWorkManager
now return a newOperation
type. - All variants of
enqueue
no longer accept varargs forWorkRequest
s. - Attempting to
initialize
WorkManager
more than once per process will now result in anIllegalStateException
.
Version 1.0.0-alpha10
October 11, 2018
This release supports developer-controlled asynchronous work. There are breaking API changes in this release; please see the Breaking API Changes section below.
We anticipate that WorkManager is entering the final phases of its alpha period. We expect to be API stable in beta, so please take some time to file your feedback on our issue tracker.
API Changes
- Removed all previously
deprecated
methods and classes, notably the defaultWorker
constructor. This is a breaking API change. - Renamed
NonBlockingWorker
toListenableWorker
, which is now an unhidden public class and ready for usage.-
ListenableWorker
provides access to one abstract method,ListenableFuture<Payload> onStartWork()
which is called on the main thread. It is up to you to start and process work asynchronously. When finished, you should update theListenableFuture
appropriately. Reference implementations ofListenableFuture
s are provided in theFutures
package inalpha02
(see below theWorkManager
section). -
Worker
extendsListenableWorker
and still operates as before, with an abstractResult doWork()
method. - Shuffled some methods and members from
Worker
toListenableWorker
. - We shall soon provide reference implementations for
ListenableWorker
s that use Kotlin coroutines (once the stable versions are released) and RxJava2.
-
- The interface
WorkerFactory
and the concrete implementationDefaultWorkerFactory
have been merged into an abstract class calledWorkerFactory
. The implementation ensures that the default reflection-based behavior is called as a last-ditch effort for any user-createdWorkerFactory
instances. This is a breaking change. - Removed
WorkManager.synchronous()
andWorkContinuation.synchronous()
and all related methods. AddedListenableFuture<Void>
as the return type of many methods in the API. This is a breaking API change.- You can now synchronously get and observe by using
ListenableFuture
s. For example,WorkManager.enqueue()
used to returnvoid
; it now returns aListenableFuture<Void>
. You can callListenableFuture.addListener(Runnable, Executor)
orListenableFuture.get()
to run code once the operation is complete. - Note that these
ListenableFuture
s do not tell you if the operation succeeded or failed; only that they finished. You will still need to chain WorkManager methods to find out this information. - We ignore
cancel()
calls on these objects, as they are confusing and hard to reason about (are you cancelling the operation or the resulting work?). This is within theFuture
s contract. - To maintain parity with the synchronous
getStatus*
methods, we have providedListenableFuture
variants, and renamed the existing ones that returnedLiveData
to explicitly have "LiveData" as part of the name (for example,getStatusesByIdLiveData(UUID)
). This is a breaking API change.
- You can now synchronously get and observe by using
Исправления ошибок
- Fixed the known issue from alpha09 regarding duplicate
androidx-annotations.pro
files. You may remove the workaround from the previous release notes by deletingexclude 'META-INF/proguard/androidx-annotations.pro'
from your gradle file. - Added proguard configurations to keep new
Worker
constructor. b/116296569 - Fix potential
NullPointerException
in a race condition where work wasREPLACE
d. b/116253486 and b/116677275 -
WorkContinuation.combine()
now accepts one or moreWorkContinuation
s instead of two or more. b/117266752
Breaking API Changes
- Removed all previously
deprecated
methods and classes, notably the defaultWorker
constructor. - The interface
WorkerFactory
and the concrete implementationDefaultWorkerFactory
have been merged into an abstract class calledWorkerFactory
. - Removed
WorkManager.synchronous()
andWorkContinuation.synchronous()
. -
WorkManager.getStatus*()
methods now returnListenableFuture
s.WorkManager.getStatus*LiveData()
returnLiveData
s.
Version 1.0.0-alpha09
19 сентября 2018 г.
Известная проблема
If you run into the following issue: "More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'", please put the following in your gradle file as a temporary workaround while we fix the issue in alpha10:
Круто
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Исправления ошибок
- Added another fix that was needed for the "100 jobs" error. b/115560696
- Added some fixes for foreign key constraint errors due to race conditions. b/114705286
- Delegated
ConstraintTrackingWorker.onStopped(boolean)
calls to the underlyingWorker
. b/114125093 - Enforce correct minimum backoff delay for Firebase JobDispatcher. b/113304626
- Improved threading guarantees internal to the library.
- Correct potential issue with deduping of
LiveData
internally.
API Changes
- You can now create your own
Worker
instances at runtime by specifying aWorkerFactory
as part of theWorkManager.Configuration
. The fallback factory isDefaultWorkerFactory
, which matches behavior of previous versions of WorkManager.- The default constructors for
Worker
andNonBlockingWorker
are now marked as deprecated. Please use the new constructor (Worker(Context, WorkerParameters)
) and callsuper(Context, WorkerParameters)
; future versions of WorkManager will remove the default constructor.
- The default constructors for
- We have started using the new
ListenableFuture
artifact internally (free of Guava dependencies). We will introduce ListenableFutures to the API in upcoming releases. This change will support the eventual unhiding ofNonBlockingWorker
. - Add ability to trigger timed work in
TestDriver
viaTestDriver.setInitialDelayMet(UUID)
andTestDriver.setPeriodDelayMet(UUID)
. b/113360060
Критические изменения
- The default
Worker
andNonBlockingWorker
constructors are deprecated. Please migrate to the new constructor ASAP. Future versions will remove the default constructor.
Version 1.0.0-alpha08
August 27, 2018
Исправления ошибок
- Explicitly labelled WorkManager components as direct boot unaware so they don't fire up during direct boot. In the future, we will provide a version of WorkManager that is direct boot-aware. b/112665532
- Fixed an issue where retried work was not running. b/112604021
- Fixed periodic work not executing repeatedly (related to the above issue). b/112859683
- Honored backoff policies when the app process is already running.
- Corrected exception messages in
Data
to indicate the limit is 10KB. - Lowered maximum value of
Configuration.setMaxSchedulerLimit(int)
to 50 to account for some latency inJobScheduler
processing completion. b/112817355
Version 1.0.0-alpha07
August 16, 2018
Исправления ошибок
- Fixed a potential SQL query with negative limits that could return an unbounded number of results.
- Work that has finished execution now correctly cancels all pending copies of that work in other Schedulers. This led to exceeding the
JobScheduler
jobs limit. b/111569265 - Fixed a
ConcurrentModificationException
inConstraintTracker
. b/112272753 - Changed return type annotations of
Data.getBooleanArray(String)
andData.getIntArray(String)
to@Nullable
instead of@NonNull
. b/112275229
API Changes
-
Worker
now extends a new class,NonBlockingWorker
. This does not affect any current usage. In the future,NonBlockingWorker
will become a fully supported entity for custom threading solutions. - Changed return type annotations of
Data.getBooleanArray(String)
andData.getIntArray(String)
to@Nullable
instead of@NonNull
. b/112275229 - Kotlin extensions: deprecated
Map.toWorkData()
and added a top-levelworkDataOf(vararg Pair<String, Any?>)
to be more consistent with existing APIs.
Version 1.0.0-alpha06
August 1, 2018
Исправления ошибок
- Prevent a database lock when scheduling work. b/111801342
- Fix a bug which causes
PeriodicWork
to not run on schedule when in Doze mode. b/111469837 - Fix a race condition when tracking constraints which causes
WorkManager
to crash. googlecodelabs/android-workmanager/issues/56 - Create unique
WorkRequest
s when usingWorkRequest.Builder#build()
. b/111408337 - Enable the use of
RescheduleReceiver
only when there areWorkRequest
s that need it. b/111765853
Version 1.0.0-alpha05
July 24, 2018
API Changes
-
WorkManager.getInstance()
is now annotated with@NonNull
instead of@Nullable
. Instead, if the singleton isn't properly initialized in cases of manual initialization, the method will throw anIllegalStateException
. This is a breaking API change. - Added a new API,
Configuration.Builder.setMinimumLoggingLevel(int)
, which can control WorkManager verbosity. By default, WorkManager logsLog.INFO
and above. - Changed signature of
Data.getString()
so it no longer takes a default value (it is implicitlynull
). This is a breaking API change. - Marked some methods needed only for internal usage as
@hide
. This includes theConstraints
constructor,Data.toByteArray()
, andData.fromByteArray(byte[])
. This is a breaking API change.
Исправления ошибок
- WorkManager no longer executes work during known cases of auto-backup. This could have resulted in a crash. b/110564377
- Fixed double-scheduling of
PeriodicWorkRequest
s when usingJobScheduler
. b/110798652 - Fixed an issue with
PeriodicWorkRequest
s not executing correctly after device doze. b/111469837 - Fixed an issue with initial delays when using Firebase JobDispatcher. b/111141023
- Fixed some potential race conditions and timing issues.
- Correctly freed up
BroadcastReceiver
s that were no longer needed. - Optimized rescheduling performance when apps restart after being force closed.
- Allowed
TestScheduler.setAllConstraintsMet(UUID)
to be called before or after enqueuing the givenWorkRequest
. b/111238024
Критические изменения
-
WorkManager.getInstance()
is now annotated with@NonNull
instead of@Nullable
. - Changed signature of
Data.getString()
so it no longer takes a default value (it is implicitlynull
). - Marked some methods needed only for internal usage as
@hide
. This includes theConstraints
constructor,Data.toByteArray()
, andData.fromByteArray(byte[])
.
Version 1.0.0-alpha04
June 26, 2018
Исправления ошибок
-
PeriodicWorkRequest
s are now correctly rescheduled when using theAlarmManager
based implementation. - Fixed a potential ANR when rescheduling all workers after a force stop or a reboot. b/110507716
- Added nullability annotations to various WorkManager APIs. b/110344065
- Log uncaught exceptions that occur during Worker execution. b/109900862
- Allowed destructive database migrations in case you decide to roll back to an older version of WorkManager. b/74633270
- Fixed a migration crash if creating duplicate implicit tags. This is a very rare issue that occurred only if you used the same implicit tag format yourself.
Version 1.0.0-alpha03
19 июня 2018 г.
Исправления ошибок
Fixed a race condition in the
AlarmManager
based implementation. b/80346526 .Fixed duplicate jobs when using
JobScheduler
after a device reboot.Jobs with Content URI triggers now persist across reboots. b/80234744
Documentation updates. b/109827628 , b/109758949 , b/80230748
Fixed a crash when re-enqueuing a
WorkRequest
. b/109572353 .Fixed Kotlin compiler warnings when using the
work-runtime-ktx
dependency.WorkManager now uses
Room
version1.1.1-rc1
.
API Changes
- Added
getStatusesSync()
, the synchronous version ofWorkContinuation.getStatuses()
. -
Worker
has the ability to distinguish between user-initiated cancellation and temporary os-requested stopping.Worker.isStopped()
returnstrue
if any kind of stop has been requested.Worker.isCancelled()
returnstrue
when the work has been explicitly cancelled. b/79632247 - Add support for JobParameters#getNetwork() on API 28. This is exposed via
Worker.getNetwork()
. - Added
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
so you can enforce how many jobs can be sent toJobScheduler
orAlarmManager
. This helps preventWorkManager
from taking all your availableJobScheduler
slots. - Added
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
which helps define a range ofJobScheduler
job ids safe forWorkManager
to use. b/79996760 -
Worker.getRunAttemptCount()
returns the current run count for a givenWorker
. b/79716516 -
WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
allows you to enqueue a uniquePeriodicWorkRequest
s. b/79600647 -
WorkManager.cancelAllWork()
cancels allWorker
s. Libraries that depend onWorkManager
can query when this method was called last by usingWorkManager.getLastCancelAllTimeMillis()
for additional cleanup of internal state. - Added
WorkManager.pruneWork()
to remove completed jobs from the internal database. b/79950952 , b/109710758
Изменения поведения
- Added an implicit tag for all
WorkRequest
s, which is the fully qualified class name for theWorker
. This allows the ability to removeWorkRequest
s withouttag
s or when theid
is not available. b/109572351
Критические изменения
- Renamed
Worker.WorkerResult
toWorker.Result
. -
Worker.onStopped
now has an additionalisCancelled
parameter which is set totrue
when theWorker
has explicitly been cancelled.
Version 1.0.0-alpha02
24 мая 2018 г.
Исправления ошибок
- Fixed a
NullPointerException
onState.isFinished()
. b/79550068 - Fixed an issue which caused
Worker
s to be rescheduled onApplication.onCreate()
. b/79660657 - Fixed an issue where you could schedule more work than is allowed by the OS. b/79497378
- Moved cleanup of wake locks associated with
Worker
s to the background thread. - The
AlarmManager
implementation now correctly cleans up when all pending work is complete. - Fixed cleanup SQL queries which affected non-English locales. b/80065360
- Added support for
float
s inData
. b/79443878 -
Data.Builder.putAll()
now returns an instance of theBuilder
. b/79699162 - More javadoc and fixes in documentation. b/79691663
API Changes
-
Worker
s can react to being stopped.Worker.isStopped()
can be used to check if aWorker
has been stopped.Worker.onStopped()
can be used to perform lightweight cleanup operations. -
Worker.getTags()
API returns aSet
of tags associated with theWorker
. - Added
javax.time.Duration
overloads for APIs which take a combination of duration andTimeUnit
s. This is guarded by@RequiresApi(26)
. -
WorkManager
extensions have moved from theandroidx.work.ktx
package to theandroidx.work
package. The old extensions are deprecated and will be removed in a future version. -
Configuration.withExecutor()
is deprecated. UseConfiguration.setExecutor()
instead.
Version 1.0.0-alpha01
8 мая 2018 г.
WorkManager simplifies scheduling and execution of guaranteed, constraint-aware background work. This initial release is 1.0.0-alpha01
.