Менеджер работ
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
2 октября 2024 г. | 2.9.1 | - | 2.10.0-бета01 | - |
Объявление зависимостей
Чтобы добавить зависимость от WorkManager, вам необходимо добавить в свой проект репозиторий Google Maven :
Добавьте зависимости для нужных вам артефактов в файл build.gradle
для вашего приложения или модуля:
классный
dependencies { def work_version = "2.9.1" // (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.9.1" // (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.10
Версия 2.10.0-бета01
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», поскольку они будут содержать имя выполняемого работника. Разделы трассировки также добавляются вокруг ключевых областейWorkManager
.
Изменения API
- WorkManager 2.10.0 теперь скомпилирован с SDK 35.
- Исправлена ошибка, из-за которой рабочие переднего плана типа «короткое обслуживание» и «синхронизация данных» теряли время и вызывали ошибку ANR, когда
WorkManager
не вызывалstopSelf()
. Это исправление применимо только к устройствам с API 34 и 35, где были представлены типы приоритетных служб. ( ca06b2 , б/364508145 ) - Новые API-интерфейсы
WorkerParameters
, которые позволяют переключать удаленный процесс, к которому привязываетсяWorker
при использованииWorkerFactory
. ( Ibdc8a , Ie8a90 , I7373f )
Исправления ошибок
- Исправлен сбой, вызванный попыткой
WorkManager
перезапустить долго работающего работника (т. е. работника переднего плана), когда у переднего типа работы были необходимые разрешения Android 14, которые были отозваны. ( б/333957914 ) - Убрано ручное определение доступа к API новой платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или новее (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или новее (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется выполнить обновление до D8 версии 8.1 или более поздней. Более подробную информацию можно найти в этой статье . ( Ia60e0 , б/345472586 )
Версия 2.10.0-альфа02
17 апреля 2024 г.
Выпущен androidx.work:work-*:2.10.0-alpha02
. Версия 2.10.0-alpha02 содержит эти коммиты .
Изменения API
- Добавлена возможность генерировать диапазоны трассировки через настраиваемый
@RestrictTo
Tracer
вWorkManager
. ( I17d7f , б/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. Это может потребовать внесения изменений в исходный код клиентов, если предположения об обнуляемости в этом коде окажутся неверными. ( Если6757 )
Версия 2.10.0-альфа01
24 января 2024 г.
Выпущен androidx.work:work-*:2.10.0-alpha01
. Версия 2.10.0-alpha01 содержит эти коммиты.
Новые возможности
- Разработчики могут указать
NetworkRequest
в качестве ограничения для работника с помощью методаConstraints.setRequiredNetworkRequest
. Это обеспечивает более детальный контроль над тем, в какой сети должен работать этот исполнитель.
Изменения API
- Добавление возможности указывать
NetworkRequest
в качестве ограничения. ( Id98a1 , б/280634452 )
Версия 2.9
Версия 2.9.1
7 августа 2024 г.
Выпущен androidx.work:work-*:2.9.1
. Версия 2.9.1 содержит эти коммиты .
Исправления ошибок
- Исправлен сбой, вызванный попыткой
WorkManager
перезапустить долго работающего работника (т. е. работника переднего плана), когда у переднего типа работы были необходимые разрешения Android 14 , которые были отозваны. ( б/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-интерфейсы Coroutines, такие как
CoroutineWorker
были перемещены из дополнительной среды выполнения артефакта в рабочую среду выполнения основного артефакта. work-runtime-ktx теперь пуст.
Изменения API
-
stopReason
был добавлен вWorkInfo
. Это делаетstopReason
доступным после запуска работника. Это могло бы быть полезно при составлении отчетаstopReason
в удобной для использования форме, потому что как только рабочий процесс был остановлен, само приложение может быть закрыто очень быстро. ( I21386 ) - Разрешить настройку
Clock
через конфигурацию и использование для управления последовательностью выполнения тестов Worker. ( Ic586e ) - В
ListenableWorker
был добавлен методgetStopReason()
, который подсказывает, почему рабочий процесс был остановлен. ( I07060 ) - Добавлен
WorkManagerTestInitHelper#closeWorkDatabase()
чтобы избежать предупреждения Closeguard об утечке ресурсов. ( Ia8d49 ) - Конструктор
WorkInfo
теперь общедоступен, что может быть полезно при тестировании. ( Ia00b6 , б/209145335 ) -
work-runtime-ktx
теперь пуст,CoroutineWorker
и другие специфичные для Kotlin утилиты теперь доступны в основном артефакте среды выполнения. ( I71a9a ) - Добавлен метод
setNextScheduleTimeOverride
, позволяющий точно настроить периодические графики работы ( I3b4da ). - В
WorkInfo
добавлен методgetNextScheduleTimeMillis
для получения информации о запланированном времени выполнения. ( I797e4 ) - Информация о начальной задержке и периодичности добавляется в
WorkInfo
. ( I52f2f ) - Добавлен метод наблюдения за работниками через потоки с помощью методов
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
( If122a ). - Добавлены отсутствующие аннотации
@RequiresApi(...)
к конструкторам и свойствамConstraints
. Теперь они приведены в соответствие с соответствующими аннотациями к установщикам вConstraints.Builder
, которые существовали в ранних версияхWorkManager
. ( I6d7d2 ) -
WorkManager
теперь имеет отдельный лимит для работников URI контента, чтобы предоставить им гарантированные слоты вJobScheduler
, чтобы предотвратить пропуск обновлений контента при высокой нагрузке. Ограничение можно настроить с помощьюConfiguration.Builder.setContentUriTriggerWorkersLimit
. ( Ic128f ) - Ограничения добавляются в
WorkInfo
. ( я162c0 )
Версия 2.9.0-rc01
18 октября 2023 г.
androidx.work:work-*:2.9.0-rc01
выпущен. Версия 2.9.0-rc01 содержит эти коммиты.
- Никаких изменений с момента последней бета-версии
Версия 2.9.0-бета01
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
-
stopReason
был добавлен вWorkInfo
. Он делает доступнымstopReason
после запуска работника. Это могло бы быть полезно при составлении отчетаstopReason
в удобном для использования виде, потому что как только рабочий процесс был остановлен, само приложение может быть очень быстро закрыто. ( I21386 ) - Разрешить настройку Clock через конфигурацию и использование для управления последовательностью выполнения тестов 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-интерфейсы Coroutines, такие как
CoroutineWorker
были перемещены из дополнительного артефактаwork-runtime-ktx
в основной артефактwork-runtime
.work-runtime-ktx
теперь пуст.
Изменения API
- Конструктор
WorkInfo
теперь общедоступен, что может быть полезно при тестировании. ( Ia00b6 , б/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
. ( я162c0 )
Версия 2.8
Версия 2.8.1
22 марта 2023 г.
androidx.work:work-*:2.8.1
выпущен. Версия 2.8.1 содержит эти коммиты.
Исправления ошибок
- Исправлен ANR в
RescheduleReceiver
, который ранее неправильно обрабатывал две одновременные широковещательные рассылки. ( б / 236906724 )
Версия 2.8.0
8 февраля 2023 г.
Выпущен androidx.work:work-*:2.8.0
. Версия 2.8.0 содержит эти коммиты.
Важные изменения с версии 2.7.0
Новые возможности
- Была добавлена возможность обновлять
WorkRequests
ненавязчивым способом, сохраняя исходное время постановки в очередь, цепочку и т. д. Подробную информацию см. в блоге об этой функции, а также в документации Java дляWorkManager.updateWork
иExistingPeriodicWorkPolicy.UPDATE
.
Изменения API
-
WorkManager.updateWork
был добавлен для обновления работы, сохраняя исходное время постановки в очередь и цепочку. ( I9a248 , b/219446409 ). - Добавлен
ExistingPeriodicWorkPolicy.UPDATE
. Эта политика позволяет периодически обновлять произведение по названию. Он похож на существующийREPLACE
, но менее навязчив: он не отменяет рабочий процесс, если он в данный момент работает, и сохраняет время постановки в очередь — начальная задержка и период рассчитываются на основе исходного времени постановки в очередь, а не времени обновления.REPLACE
устарел, чтобы уменьшить путаницу междуREPLACE
иUPDATE
с очень похожими названиями. Если вы все еще хотите сохранить предыдущую семантикуREPLACE
, можно использовать недавно добавленныйCANCEL_AND_REENQUEUE
, который идентиченREPLACE
. ( I985ed , р/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
. ( б / 199919736 ) ( If48f2 , б / 199919736 ) - Добавлен
getForegroundInfo
вWorker
. ( Ic1head ) -
RxWorker
для RxJava 2 и RxJava 3 теперь имеетsetForeground
возвращающийCompletable
, который можно использовать вместоsetForegroundInfoAsync
, который возвращаетListenableFuture
-
RxWorker
как для RxJava 2, так и для RxJava 3 имеетgetForegroundInfo
возвращающийSingle
, который можно использовать вместоgetForegroundInfoAsync
, который возвращаетListenableFuture
. ( б / 203851459 ) - Ограничения теперь можно создавать напрямую, а не с помощью
Constraints.Builder
, что удобно для пользователей Kotlin. ( Idc390 , б/137568653 ) - Добавлена возможность проверить, был ли инициализирован
WorkManager
. Кроме того, добавлен новый APIgetConfiguration()
для разработчиков библиотек, позволяющий получить конфигурацию, с которой был инициализированWorkManager
. ( I6eff3 , б/212300336 )
Исправления ошибок
- Исправлена проблема с жадным планировщиком, из-за которой рабочие процессы не запускались немедленно при нагрузке. ( I9686b , б/248111307 )
- Добавлен
@RequiresPermission
для API, требующих предоставления разрешенияPOST_NOTIFICATIONS
в SDK 33 и более поздних версиях. ( Ie542e , б/238790278 ) - Распространите отмены из
CoroutineScope
вListenableFuture
при использованииsuspendCancellableCoroutine
.
Версия 2.8.0-rc01
7 декабря 2022 г.
androidx.work:work-*:2.8.0-rc01
выпущен. Версия 2.8.0-rc01 содержит эти коммиты.
Новые возможности
- В этом выпуске нет новых функций. В основном это обновление версии
Версия 2.8.0-бета02
9 ноября 2022 г.
Выпущен androidx.work:work-*:2.8.0-beta02
. Версия 2.8.0-beta02 содержит эти коммиты.
Исправления ошибок
- Исправлен метод
equals
вWorkInfo
, который ранее не учитывал информацию нового поколения. ( 4977cc )
Версия 2.8.0-бета01
5 октября 2022 г.
androidx.work:work-*:2.8.0-beta01
выпущен. Версия 2.8.0-beta01 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема с жадным планировщиком, из-за которой рабочие процессы не запускались немедленно при нагрузке. ( I9686b , б/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 , б / 219446409 ) ( I128a9 , б / 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
. ( I985ed , р/219446409 ) - Добавьте возможность перехватывать исключения планирования, определив
SchedulingExceptionHandler
. ( I033eb ) - Встроенные помощники для
OneTimeWorkRequest
иPeriodicWorkRequest
были перенесены изandroidx.work:work-runtime-ktx
вandroidx.work:work-runtime
( I0010f , b/209145335 ).
Исправления ошибок
- Добавлен
@RequiresPermission
для API, требующих предоставления разрешения POST_NOTIFICATIONS в SDK 33 и более поздних версиях. ( Ie542e , б/238790278 )
Версия 2.8.0-альфа02
6 апреля 2022 г.
Выпущен androidx.work:work-*:2.8.0-alpha02
. Версия 2.8.0-alpha02 содержит эти коммиты.
Изменения API
- Ограничения теперь можно создавать напрямую, а не с помощью Builder, что удобно для пользователей Kotlin. ( Idc390 , б/137568653 )
- Добавлена возможность проверить, был ли инициализирован
WorkManager
. Кроме того, добавлен новый APIgetConfiguration()
для разработчиков библиотек, позволяющий получить конфигурацию, с которой был инициализированWorkManager
. ( I6eff3 , б/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 , б/199919736 ) - Добавляет экспериментальные методы BuildCompat для будущих SDK ( Iafd82 , b/207528937 ).
- Добавьте
getForegroundInfo
вWorker
. ( Ic1head ) - Добавлены вспомогательные методы
WorkQuery.fromIds
для создания WorkQuery непосредственно из идентификаторов. ( Ie5bdf , р/199919736 ) - RxWorker теперь имеет
setForeground
возвращающийCompletable
, который можно использовать вместоsetForegroundInfoAsync
, который возвращаетListenableFuture
. ( I85156 ) - RxWorker для RxJava 2 теперь имеет
getForegroundInfo
возвращающийSingle
, который можно использовать вместоgetForegroundInfoAsync
, который возвращаетListenableFuture
. ( I21c91 , б/203851459 ) - RxWorker для RxJava 3 теперь имеет
getForegroundInfo
возвращающийSingle
, который можно использовать вместоgetForegroundInfoAsync
, который возвращаетListenableFuture
. ( I1ca8a ) - RxWorker теперь имеет
setForeground
возвращающийCompletable
, который можно использовать вместоsetForegroundInfoAsync
, который возвращаетListenableFuture
. ( I992a3 , б/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(...)
помогающий справиться с ограничениями службы переднего плана в 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-бета01
1 сентября 2021 г.
androidx.work:work-*:2.7.0-beta01
выпущен. Версия 2.7.0-beta01 содержит эти коммиты.
Новые возможности
- Уменьшите конфликты между несколькими процессами SQLite при инициализации WorkManager.
Изменения API
- Удалите API
@ExperimentalExpeditedWork
, поскольку API базовой платформы для Android 12 (S) стабильны. ( аосп/1792806 )
Исправления ошибок
- Предоставьте лучшее сообщение об ошибке для ускоренных работников, которые не реализуют
getForegroundInfoAsync()
. ( аосп/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
: добавлена поддержка воркеров, которые могут работать в любом процессе. ( Иаф200 )Из 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" />
Добавлена поддержка воркеров, которые могут работать в любом процессе. ( Иаф200 )
Добавлен
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-бета02
21 июля 2021 г.
Выпущен androidx.work:work-*:2.6.0-beta02
. Версия 2.6.0-beta02 содержит эти коммиты.
Исправления ошибок
-
RemoteWorkManager
теперь корректно отсоединяется отRemoteWorkManagerService
, что позволяетRemoteWorkManagerService
правильно выполнить очистку. аосп/1730694 -
RemoteListenableWorker
теперь корректно отсоединяется отRemoteWorkerService
, что позволяетRemoteWorkerService
правильно выполнить очистку. аосп/1743817 -
ForceStopRunnable
теперь работает только в основном процессе приложения. Это оптимизация, позволяющая избежать конкуренции за ресурсы для приложений, использующих несколько процессов. аосп/1749180 , аосп/1761729
Версия 2.6.0-бета01
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 содержит эти коммиты.
Новые возможности
Добавляет поддержку воркеров, которые могут работать в любом процессе. ( Иаф200 )
Добавлен
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
. ( аосп/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
. ( аосп/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
s. 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
. ( AOSP/1185778 ) - Workmanager теперь поддерживает Rxjava 3. Чтобы использовать Rxjava 3, вы должны включить следующую зависимость:
implementation "androidx.work:work-rxjava3:2.4.0"
. ( AOSP/1277904 ) - Добавлена возможность запросить на
WorkInfo
с использованиемWorkQuery
. Это полезно, когда разработчики хотят запрашиватьWorkInfo
с помощью комбинации нескольких атрибутов. Для получения дополнительной информации посмотрите наWorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
илиWorkQuery.Builder.fromUniqueWorkNames(...)
. ( AOSP/1253230 , B/143847546 ) Добавьте возможность запросить диагностическую информацию у
WorkManager
используя:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
Это предоставляет много полезной информации, включая:
- WorkRequests, которые были завершены за последние 24 часа.
- WorkRequests, которые в настоящее время работают.
- Запланированные рабочие закидки. ( AOSP/1235501 )
Добавьте
ExistingWorkPolicy.APPEND_OR_REPLACE
, который похож наAPPEND
, но заменяет цепочку, которая отменила или провалилась предпосылки. ( B/134613984 , AOSP/1199640 )Предоставьте возможность добавить пользовательский
RunnableScheduler
для отслеживания рабочих зачинений, которые необходимо выполнить в будущем. Это используется в программе Processess. ( AOSP/1203944 )Добавьте поддержку для динамического добавления заводов, чтобы делегировать при использовании
DelegatingWorkerFactory
. ( B/156289105 , AOSP/1309745 )Выравнивание отслеживания для ограничений
BATTERY_NOT_LOW
более тесно с платформой. ( AOSP/1312583 )Планировщик Introcess теперь использует лучшие API для определения имени процесса. Это полезно для лучшей поддержки приложений, которые используют несколько процессов. ( AOSP/1324732 )
Новые правила Lint, которые обеспечивают соблюдение:
- Использование
setForegroundAsync()
foregroundServiceType
. ( B/147873061 , AOSP/1215915 ) - Указание идентификаторов Jobscheduler, которые Workmanager должен использовать при непосредственном использовании API Jobservice. AOSP/1223567
- Добавлено новое правило Lint, которое гарантирует, что реализации
ListenableWorker
теперьpublic
при использованииWorkerFactory
по умолчанию. ( AOSP/1291262 )
- Использование
Вызовы на
setForegroundAsync()
, которые не завершены до завершенияListenableWorker
, теперь будут сигнализированы с помощьюIllegalStateException
на возвращаемойListenableFuture
. ( AOSP/1262743 )Исправьте ошибку, в которой
ForegroundService
не останавливается после прерывания переднегоWorker
. ( B/155579898 , AOSP/1302153 )Исправьте ошибку, в которой
WorkManager
пытается выполнить несколько экземпляровWorker
, связанного с службой переднего плана ( B/156310133 , AOSP/1309853 )
Версия 2.4.0-rc01
24 июня 2020 года
androidx.work:work-*:2.4.0-rc01
выпускается. Версия 2.4.0-rc01 содержит эти коммиты.
Исправления ошибок
- Планировщик Introcess теперь использует лучшие API для определения имени процесса. Это полезно для лучшей поддержки приложений, которые используют несколько процессов. ( AOSP/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,0-бета-бита01. Версия 2.4.0-beta01 содержит эти коммиты.
Исправления ошибок
- Исправьте ошибку, в которой
ForegroundService
не останавливается после прерывания переднегоWorker
. ( B/155579898 , AOSP/1302153 ) - Исправьте ошибку, в которой
WorkManager
пытается выполнить несколько экземпляровWorker
, связанного с службой переднего плана ( B/156310133 , AOSP/1309853 ) - Добавьте поддержку для динамического добавления заводов, чтобы делегировать при использовании
DelegatingWorkerFactory
. ( B/156289105 , AOSP/1309745 ) - Выравнивание отслеживания для ограничений
BATTERY_NOT_LOW
более тесно с платформой. ( AOSP/1312583 )
Версия 2.4.0-Alpha03
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"
. ( AOSP/1277904 ) - Добавлено новое правило Lint, которое гарантирует, что реализации
ListenableWorker
теперьpublic
при использованииWorkerFactory
по умолчанию. ( AOSP/1291262 )
Изменения API
- Вызов
setProgressAsync()
после того, какListenableWorker
завершит выполнение, теперь будет сигнализировать обException
черезListenableFuture
. ( AOSP/1285494 ) -
WorkQuery.Builder
теперь отмеченfinal
. ( AOSP/1275037 ) -
WorkQuery.Builder
Factory MethodswithStates
,withTags
иwithUniqueWorkNames
были переименованы вfromStates
,fromTags
иfromUniqueWorkNames
соответственно. ( AOSP/1280287 )
Исправления ошибок
- Игнорировать
SecurityException
S при отслеживании сети состояния устройства. ( B/153246136 , AOSP/1280813 )
Версия 2.4.0-Alpha02
1 апреля 2020 года
androidx.work:work-*:2.4.0-alpha02
выпускается. Версия 2.4.0-Alpha02 содержит эти коммиты.
Новые возможности
- Добавлено новое правило Lint, которое предупреждает, когда
WorkRequest
S требует какConstraints.setRequiresCharging(...)
иConstraints.setRequiresDeviceIdle(...)
. Некоторые устройства никогда не заряжаются и одновременно простаивают. Таким образом, такие запросы будут работать реже, чем ожидалось. ( AOSP/1253840 )
Изменения API
Добавлена возможность запросить на
WorkInfo
с использованиемWorkQuery
. Это полезно, когда разработчики хотят запрашиватьWorkInfo
с помощью комбинации нескольких атрибутов. Для получения дополнительной информации посмотрите наWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
илиWorkQuery.Builder withUniqueWorkNames(...)
. ( AOSP/1253230 , B/143847546 )Вызовы на
setForegroundAsync()
, которые не завершены до завершенияListenableWorker
, теперь будут сигнализированы с помощьюIllegalStateException
на возвращаемойListenableFuture
. ( AOSP/1262743 )
Исправления ошибок
- Исправлено правило LINT, которое проверяет на неверные промежутки времени для
PeriodicWorkRequest
. ( AOSP/1254846 , B/152606442 )
Версия 2.4.0-Alpha01
4 марта 2020 года
androidx.work:work-*:2.4.0-alpha01
выпускается. Версия 2.4.0-Alpha01 содержит эти коммиты.
Новые возможности
Планировщик
WorkManager
S теперь более способен. Раньше, планировщик в процессе процесса рассматривал только выполнение работы, которая не была задержана и чьи ограничения были достигнуты. Теперь в процессе планировщика отслеживаетWorkRequest
силу, которые могут быть выполнены в будущем, включаяPeriodicWorkRequest
размер. Планировщик в процессе также не наблюдает ограничений планирования (но все еще ограничен размеромExecutor
, используемого Workmanager). Это означает, что приложение теперь может выполнять гораздо большеWorkRequest
, когда приложение находится на переднем плане. ( AOSP/1185778 )Добавлена возможность запросить диагностическую информацию у Workmanager с использованием
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Это предоставляет много полезной информации, включая:- WorkRequests, которые были завершены за последние 24 часа.
- WorkRequests, которые в настоящее время работают.
- Запланированные рабочие закидки. ( AOSP/1235501 )
Новые правила Lint, которые обеспечивают соблюдение:
- Использование
setForegroundAsync()
foregroundServiceType
. ( B/147873061 , AOSP/1215915 ) - Указание идентификаторов
JobScheduler
, которыеWorkManager
должен использовать при непосредственном использовании APIJobService
. ( AOSP/1223567 )
- Использование
Изменения API
Добавьте
ExistingWorkPolicy.APPEND_OR_REPLACE
, который похож наAPPEND
, но заменяет цепочку, которая отменила или провалилась предпосылки. ( B/134613984 , AOSP/1199640 )Предоставьте возможность добавить пользовательский
RunnableScheduler
для отслеживанияWorkRequest
, которые необходимо выполнить в будущем. Это используется в программе Processess. ( AOSP/1203944 )
Исправления ошибок
- Устаревший
setProgress()
уRxWorker
, потому что он ранее возвращалSingle<Void>
, который является невозможным типом. Добавлен новый APIsetCompletableProgress()
, который возвращаетCompletable
вместо этого; и добавили новые правила Lint, которые помогают мигрировать в новые API. ( B/150080946 , AOSP/1242665 )
Версия 2.3.4
Версия 2.3.4
18 марта 2020 года
androidx.work:work-*:2.3.4
выпущен. Версия 2.3.4 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка, которая приведет к запуску нескольких экземпляров долгосрочных
Worker
после превышения 10 -минутного окна выполнения. ( AOSP/1247484 , B/150553353 ) - Исправление для Lint
IssueRegistry
's Lint's Lint. Спасибо @zacsweers из Slack, за вклад. ( AOSP/1217923 )
Версия 2.3.3
Версия 2.3.3
4 марта 2020 года
androidx.work:work-*:2.3.3
выпущен. Версия 2.3.3 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка, где, если
Worker
был прерван, она не будет перенесена правильно. ( B/150325687 , AOSP/1246571 )
Версия 2.3.2
Версия 2.3.2
19 февраля 2020 года
androidx.work:work-*:2.3.2
выпущены. Версия 2.3.2 содержит эти коммиты.
Исправления ошибок
- Исправляет проблему, когда Workmanager превышает 100 лимита работы в Jobscheduler в редких случаях. ( AOSP/1226859 , B/149092520 )
- Исправление для условия гонки в ConstraintControllers. ( AOSP/1220100 )
- Улучшение жизненного цикла обслуживания переднего плана управления для долгожданных работников. ( AOSP/1226295 )
- Улучшение управления отменой уведомлений для давних работников после отмены работников. ( AOSP/1228346 )
Версия 2.3.1
Версия 2.3.1
5 февраля 2020 года
androidx.work:work-*:2.3.1
выпускается. Версия 2.3.1 содержит эти коммиты .
Исправления ошибок
- Лучше управлять жизненным циклом
Notification
S для давнихWorker
, которые работают, когда активенService
переднего плана. ( AOSP/1218539 , B/147249312 ) -
WorkManager
теперь зависит отandroidx.sqlite:sqlite-framework:2.1.0
стабильная. ( AOSP/1217729 ) - Добавлены правила Lint, чтобы гарантировать, что в
AndroidManifest.xml
указанForegroundInfo
foregroundServiceType
foregroundServiceType
( AOSP/1214207 , B/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 теперь упаковывает дополнительные правила Lint в рамках библиотеки, которая помогает рано поймать ошибки.
Версия 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
. ( AOSP/1194410 )
Версия 2.3.0-бета02
18 декабря 2019 г.
androidx.work:work-*:2.3.0-beta02
выпускается. Версия 2.3.0-бета02 содержит эти коммиты .
Новые возможности
- Добавлено лучшее сообщение об ошибке для невнимательных исключений SQLite. ( AOSP/1185777 )
- Добавлено правило Lint, которое гарантирует, что поставщик контента
androidx.work.impl.WorkManagerInitializer
удаляется изAndroidManifest.xml
при использовании по инициализации по требованию. ( AOSP/1167007 ) - Добавлено предупреждение о ворсе, когда
enqueue()
используется дляPeriodicWorkRequest
вместоenqueueUniquePeriodicWork()
. ( AOSP/1166032 )
API меняется
-
ForegroundInfo
теперь требует, чтобы вы указалиnotificationId
, которое будет использоваться при использованииListenableWorker.setForegroundAsync()
. Это нарушающее изменение. Это позволяет вам запускать несколько долгосрочныхWorker
параллельно.WorkManager
также лучше управляет жизнью предоставленныхNotification
. ( B/145473554 , AOSP/1181208 , ASOP/1181216 , ASOP/1183577 )
Исправления ошибок
- Исправлена ошибка в реализации Alarmmanager, где сигналы тревоги не очищались правильно. ( AOSP/1156444 )
- Исправлена ошибка, в которой пустой список
WorkRequest
Sportquest приведет к созданию неверной цепочкиWorkContinuation
. ( B/142835274 , AOSP/1157051 )
Изменения зависимости
- Workmanager теперь использует комнату 2.2.2.
Версия 2.3.0-бета01
20 ноября 2019 года
androidx.work:work-*:2.3.0-beta01
выпускается. Версия 2.3.0-бета01 содержит эти коммиты .
Новые возможности
- Добавлено новое правило Lint, которое предотвращает ошибки разработчика из-за неправильной реализации
androidx.work.Configuration.Provider
при использовании инициализации по требованию. AOSP/1164559
Версия 2.3.0-Alpha03
23 октября 2019 года
androidx.work:work-*:2.3.0-alpha03
выпускается. Версия 2.3.0-Alpha03 содержит эти коммиты .
Новые возможности
- Добавлен
WorkManager.createCancelPendingIntent()
API, который позволяет легко отменитьWorkRequest
S без необходимости зарегистрировать другой компонент вAndroidManifest.xml
. Этот API делает особенно легко отменитьWorkRequest
S отNotification
S. Мы ожидаем, что это будет в сочетании с новыми API переднего плана в 2.3.0. - Workmanager теперь зависит от
androidx.room:*:2.2.0
стабильная.
API меняется
- Переименован в
ForegroundInfo.getNotificationType()
наForegroundInfo.getForegroundServiceType()
чтобы более соответствовать базовым API -интерфейсам платформы. ( B/142729893 , AOSP/1143316 )
Исправления ошибок
- Исправлена ошибка, которая вызвана ненужным вызовом
setTransactionSuccessful()
вне транзакции. Это происходит для редких миграций. ( B/142580433 , AOSP/1141737 )
Версия 2.3.0-Alpha02
9 октября 2019 года
androidx.work:work-*:2.3.0-alpha02
выпускается. Версия 2.3.0-Alpha02 содержит эти коммиты .
Новые возможности
- Workmanager теперь поддерживает долгосрочную работу или важную работу, которая должна быть в живой ОС. Для получения дополнительной информации посмотрите на
ListenableWorker#setForegroundAsync()
(илиCoroutineWorker#setForeground()
для kotlin). ( AOSP/1133636 )
API меняется
-
containsKey
API в данных вData
переименован вhasKeyWithValueOfType
. Соответствующий метод расширения в библиотекеktx
также был переименован. ( B/141916545 )
Исправления ошибок
- Графики Workmanager работают справедливо, когда количество ограничений планирования подходов
WorkRequest
. ( AOSP/1105766 ) - Workmanager называет
ListenableWorker#onStopped()
только в том случае, если работа еще не завершена. ( B/140055777 ) - Workmanager теперь удаляет информацию о прогрессе, когда работнику прерывается или достигает своего терминального состояния. ( AOSP/1114572 )
-
Data
теперь имеют гораздо более полезное представлениеtoString()
. ( B/140945323 ) -
Data
теперь имеют метод лучшегоequals()
. Это также поддерживаетdeepEquals
для типовArray
. ( B/140922528 ) - Workmanager теперь хранит свои внутренние файлы базы данных и предпочтений в каталоге без резервного копирования. ( B/114808216 )
Версия 2.3.0-Alpha01
22 августа 2019 г.
androidx.work:work-*:2.3.September 5, 20190-alpha01
выпускается. Коммуты, включенные в эту версию, можно найти здесь .
Новые возможности
-
ListenableWorker
, теперь может установить прогресс через APIsetProgressAsync()
. Также добавлено соответствующий APIsuspend
setProgress
-ING вCoroutineWorker
иsetProgress
вRxWorker
, который возвращаетSingle<Void>
. С этими новыми APIS работники могут передавать информацию о прогрессе черезWorkInfo
, который имеет соответствующий APIgetProgress
. ( B/79481554 ) -
Data
имеют APIcontainsKey()
, который можно использовать для проверки этих входных данных дляWorker
S, имеет ключи с ожидаемым типом. ( B/117136838 ) - Теперь
Data
могут быть сериализованы с использованиемData.toByteArray()
иData.fromByteArray()
. Обратите внимание, что сData
нет гарантий, поэтому вы не должны сохранять их или использовать для IPC между приложениями. Они безопасны для использования только между несколькими процессами одного и того же приложения. - Добавлена возможность указать
InputMergerFactory
черезConfiguration.setInputMergerFactory
. ( B/133273159 )
API меняется
- Workmanager бросит экземпляр
IllegalStateException
, еслиWorkerFactory
возвращает экземплярListenableWorker
, который был ранее применен. ( B/139554406 ) - Обновления документации вокруг отмены
ListenableFuture
и обратного вызоваonStopped()
вListenableWorker
. ( B/138413671 )
Исправления ошибок
- Планировщик в процессе перепроцесса теперь игнорирует
WorkRequest
S с ограничениемidle
. Эти запросы теперь подбираютсяJobScheduler
только тогда, когда устройство на самом делеidle
. ( AOSP/1089779 ) -
TestScheduler
теперь правильно использует указанногоExecutor
для своего исполнителя внутренней задачи в тестах. ( AOSP/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 Services доступен для уровней API <= 22. Это дополнительная зависимость, которая помогает с более надежным и работающим Фоновая обработка на старых версиях API. Если ваше приложение использует службы Google Play, добавьте эту зависимость в ваш файл Gradle, чтобы автоматически получить поддержку GCMnetWorkManager. Если игровые услуги не доступны, Workmanager продолжит возвращаться к Alarmmanager на старых устройствах.
Версия 2.2.0-RC01
30 июля 2019 года
androidx.work:work-*:2.2.0-rc01
выпускается. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Исправлена ошибка в реализации Alarmmanager, которая приводит к преждевременному выключению службы и приводит к тому, что в редких случаях в
RejectedExecutionException
в редких случаях. ( AOSP/1092374 ) ( B/138238197 ). - Добавлен обходной путь для
NullPointerException
при использовании APIJobScheduler
на некоторых устройствах. ( AOSP/1091020 ) ( B/138364061 ), ( B/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 Services доступен для уровней API <= 22. Это необязательная зависимость, которая помогает с более надежным и эффективная обработка фоновой обработки на старых версиях API. Если ваше приложение использует службы Google Play, добавьте эту зависимость в ваш файл Gradle, чтобы автоматически получить поддержку GCMnetWorkManager. Если игровые услуги не доступны, Workmanager продолжит возвращаться к Alarmmanager на старых устройствах.
Исправления ошибок
- Исправлено для
IllegalArgumentException
при отслеживании состояния сети на таблетках Nvidia Shield K1. ( AOSP/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
чтобы установить начальную задержку. B/111404867 - Добавлена возможность делегировать в один или несколько зарегистрированных
WorkerFactory
S с использованиемDelegatingWorkerFactory
. B/131435993 - Добавлена возможность настроить
Executor
, используемого Workmanager для всех его внутренних книг с помощьюConfiguration.Builder.setTaskExecutor
. - Добавлена возможность создавать модульные тестируемые
Worker
и классыListenableWorker
, используяTestWorkerBuilder
иTestListenableWorkerBuilder
вwork-testing
артефакта.- Обратите внимание, что
work-testing
теперь тянет котлин в качестве зависимости и включает в себя несколько расширений Kotlin по умолчанию.
- Обратите внимание, что
- Добавлены попытки запустить счет для
WorkInfo
. B/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-beta02
20 июня 2019 года
androidx.work:work-*:2.1.0-beta02
выпускается. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
-
TestListenableWorkerBuilder
теперь использует правильныйWorkerFactory
при создании экземпляровListenableWorker
. B/135275844 - Исправлена ошибка, которая вызвала дрейфы в окнах выполнения для
WorkRequest
S из -за смерти процесса. B/135272196
Версия 2.1.0-beta01
13 июня 2019 года
androidx.work:work-*:2.1.0-beta01
выпускается. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Workmanager теперь зависит от
Room 2.1.0
, которая должна решить некоторые проблемы с базой данных. - Удалил немного стартап -диска ввода/вывода в главном потоке.
- Исправлен потенциальный тупик в отслеживании ограничений. B/134361006
- Предварительно отменена недействительная работа, приписываемая Workmanager. B/134058261
- Добавлены некоторые защитные звонки в API Jobscheduler для неправильных устройств.
Версия 2.1.0-Alpha03
5 июня 2019 года
androidx.work:*:2.1.0-alpha03
выпускается.
Исправления ошибок
- Улучшенная документация для
PeriodicWorkRequest
. -
WorkManagerTestInitHelper
теперь использует правильный фоновый исполнитель для тестов. - Исправление для проблем SQLite при работе с большими транзакциями на некоторых устройствах. ( B/130182503 )
- Зависимости Workmanager теперь более детализируют. ( B/133169148 ).
- Специфические ошибки в обходном пути при внедрении
JobScheduler
при планировании работ с использованием WorkManager. - Улучшения в планировщике на основе Alarmmanager во время службы, которые ранее вызывали редкие аварии. ( B/133313734 )
Версия 2.1.0-Alpha02
16 мая 2019 года
Workmanager 2.1.0-Alpha02 выпускается. Эта версия содержит несколько новых API.
Изменения API
PeriodicWorkRequest
теперь поддерживает первоначальные задержки. Вы можете использовать методsetInitialDelay
наPeriodicWorkRequest.Builder
чтобы установить начальную задержку. B/111404867Добавлена возможность делегировать в один или несколько зарегистрированных
WorkerFactory
S с использованиемDelegatingWorkerFactory
. B/131435993Добавлена возможность настроить
Executor
, используемого Workmanager для всех его внутренних книг с помощьюConfiguration.Builder.setTaskExecutor
.Улучшенная документация вокруг
WorkRequest.keepResultsForAtLeast
foratlest ( b/130638001 ), инициализация по требованию иPeriodicWorkRequest.Builder
.
Версия 2.1.0-Alpha01
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 по умолчанию.
- Обратите внимание, что
- Добавлены попытки запустить счет для
WorkInfo
. B/127290461 - Типы
Data
теперь могут хранить и получать байты и байтовые массивы. Это не изменяет максимальный размер объектовData
. - Устаревший
CoroutineWorker.coroutineContext
. Это поле было неправильно напечатано какCoroutineDispatcher
; Вам больше не нужно, чтобы вы могли перейти к желаемому CoroutIneContext сами в теле подвесной функции. -
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 выпускается. Эта версия содержит некоторые исправления ошибок. Для пользователей Legacy 1.x некоторые из этих изменений также появляются в 1.0.1-RC01 .
Исправления ошибок
- Роболектрические тесты теперь работают должным образом с Workmanager. б/122553577
- Исправлено краевая сбоем с ограничениями, отслеживающими ограничения, не были очищены на API до предварительного Jobscheduler. б/129226383
- Исправлена
StackOverflowError
имеющая дело с длинными цепями работы. б/129091233 - Обновленная документация для
PeriodicWorkRequest
S, чтобы указать, что время гибки не поддерживается на API 23. - Исправлено несколько сломанных ссылок в документации Котлина.
Версия 2.0.0
Версия 2.0.0
20 марта 2019 года
Workmanager 2.0.0 выпущен. Эта версия идентична 2.0.0-RC01 и является версией Androidx стабильной 1,0.0 с зависимостями Androidx. Мы рекомендуем ориентироваться на эту версию вместо версий Legacy 1.x. Вся активная разработка будет нацелена на 2.x и 1.x будет получать критические исправления ошибок только в течение ограниченного времени.
Версия 2.0.0-RC01
7 марта 2019 года
Workmanager 2.0.0-RC01 выпущен. Эта версия идентична стабильной 1,0.0, но имеет зависимости Androidx. Как только это достигнет 2,0.0, вы должны включить эту версию, и версии Legacy 1.x получит только некоторые критические исправления ошибок. Вся активная разработка будет направлена на 2.x.
Зависимости до антирода
Справочные документы: 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
9 апреля 2019 года
Workmanager 1.0.1 выпущен. Этот релиз идентичен 1.0.1-RC01 .
Обратите внимание, что мы настоятельно рекомендуем пользователям обновляться до Workmanager 2.x, так как в отклике 1.x будет очень мало обновлений. Новые API также не будут выпущены для библиотеки 1.x.
Версия 1.0.1-RC01
2 апреля 2019 года
Workmanager 1.0.1-RC01 выпускается. Эта версия содержит некоторые исправления ошибок.
Исправления ошибок
- Роболектрические тесты теперь работают должным образом с Workmanager. б/122553577
- Исправлено краевая сбоем с ограничениями, отслеживающими ограничения, не были очищены на API до предварительного Jobscheduler. б/129226383
- Исправлена
StackOverflowError
имеющая дело с длинными цепями работы. б/129091233
Версия 1.0.0
Версия 1.0.0
5 марта 2019
Это стабильный релиз Workmanager 1.0.0. Эта версия Workmanager идентична 1.0.0-RC02.
Версия 1.0.0-RC02
21 февраля 2019 года
Это второй релиз кандидата на стабильный релиз Workmanager 1.0.0. Этот релиз содержит два исправления ошибок.
Исправления ошибок
Worker
S теперь правильно запланированы после сбоя приложения. B/124546316Worker
, которые бросают неконтролируемоеException
, теперь правильно обозначены какFAILED
и больше не сбивают процесс приложения.
Версия 1.0.0-RC01
14 февраля 2019 года
Это кандидат в релиз для стабильного релиза Workmanager 1.0.0. Этот релиз содержит одно исправление ошибки.
Исправления ошибок
- Реализация на основе AlarmManager теперь правильно уважает
flex
Windows для периодических пищи. б/124274584
Версия 1.0.0-бета05
6 февраля 2019 г.
Этот релиз содержит некоторые исправления ошибок.
Исправления ошибок
- Исправлено случай, когда
JobScheduler.getPendingJob(...)
использовался в API 23. B/123893059 - Исправлена
NullPointerException
на устройствах под управлением Android 5.1 (API -уровень 22) или ниже. б/123835104
Версия 1.0.0-бета04
4 февраля 2019 г.
Этот релиз содержит некоторые исправления ошибок.
Исправления ошибок
- Улучшено планирование периодической работы для реализации на основе AlarmManager.
- Исправлено случай, когда Workmanager не смог правильно отслеживать ограничения при использовании реализации на основе AlarmManager. б/123379508
- Исправлено случай, когда Workmanager не смог повторно работы по поводу смерти процесса при использовании реализации на основе Alartmanager. б/123329850
- Исправлена случай, который заставит Workmanager утечь Wakelocks при использовании реализации на основе AlarmManager.
Версия 1.0.0-бета03
25 января 2019 года
Этот релиз содержит некоторые исправления ошибок.
Исправления ошибок
- Мы представили регрессию
1.0.0-beta02
, которая заставляла работу не выполнять должным образом в некоторых ситуациях. B/123211993 - Исправлено случай, когда работа не была должным образом чести время отключения. б/122881597
- Исправлено
ConcurrentModificationException
на устройствах под управлением Android 5.1 (API или) или ниже. Это продолжение исправления в1.0.0-beta02
. б/121345393 - Добавлен
exported=false
для некоторых компонентов в нашем манифесте, которые пропустили эту аннотацию. - Включил информацию о том, как Workmanager взаимодействует с ОС в документации на уровне пакета.
Версия 1.0.0-бета02
15 января 2019 года
Этот релиз содержит некоторые исправления ошибок.
Исправления ошибок
- Исправлено случай края, когда периодическая работа могла работать более одного раза на интервал на устройствах, работающих на Android 6.0 (уровень API 23). B/121998363
- Исправлена
ConcurrentModificationException
на устройствах под управлением Android 5.1 (API -уровень 22) или ниже. б/121345393 - Исправлено ошибочное выполнение работы, когда ограничения не выполняются на устройствах под управлением Android 5.1 (уровень API 22) или ниже. B/122578012
- Оптимизированная работа по выполнению работы будет быстрее в некоторых краевых случаях. B/122358129
- Добавлено изменение для решения потенциальных условий гонки среди множества случаев
LiveData
, которые использует Workmanager. - Перемещен для использования
Room
зависимости1.1.1
вместо1.1.1-rc01
; Эти версии идентичны. б/122578011
Версия 1.0.0-бета01
19 декабря 2018 года
Этот релиз не содержит изменений API; Двигаясь вперед, ожидается, что Workmanager останется стабильным API до следующей версии, если не будет критической проблемы. Этот релиз содержит некоторые исправления ошибок.
Исправления ошибок
- Ранее сбиваемые дети успешно завершенной родительской работы больше не будут работать. B/120811767
- Правильно инициализированные классы регистрации (в основном всплыли во время тестов).
Версия 1.0.0-альфа13
12 декабря 2018 года
Этот релиз содержит незначительное изменение API, которое будет полезно для некоторых пользователей Kotlin.
Изменения API
-
androidx.work.Result
был перенесен на внутренний классListenableWorker
. Это предотвращает рефакторинг конфликтов с классомResult
верхнего уровня Котлина. Это нарушающее изменение API. B/120564418
Нарушение изменений API
-
androidx.work.Result
был перенесен на внутренний классListenableWorker
.
Версия 1.0.0-альфа12
5 декабря 2018 года
Этот релиз содержит некоторые разбитые изменения API; Пожалуйста, смотрите раздел «Разрыв API -изменений» ниже. Эта версия, вероятно, будет выпущена как наша первая бета -версия. alpha12
также содержит обширные обновления документации.
Изменения API
- Новый артефакт,
work-rxjava2
, представляетRxWorker
. ЭтоListenableWorker
, который ожидает однуSingle<Payload>
. - Поддержка Firebase JobDispatcher была удалена из -за его надвигающегося смягчения. Это означает, что артефакт
work-firebase
больше не будет обновляться, когда мы отправляемся в бета-версию. Мы рассмотрим добавление альтернативы в будущем. - Комбинированная
Payload
вResult
.Result
теперь является «герметичный класс» с тремя конкретными реализациями, которые вы можете получить черезResult.success()
(илиResult.success(Data)
),Result.failure()
(илиResult.failure(Data)
) иResult.retry()
. ВашиListenableFuture
пластинки теперьResult
результата вместоPayload
. УWorker
нет методов Getter и Setter для выходныхData
. Это нарушающее изменение. - Добавлены
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
иConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
и варианты, чтобы лучше поддерживать URIS медленного запуска URI. B/119919774 - Добавлен
WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
. Этот метод требует API 26. - Добавлена
Operation.await()
иListenableFuture.await()
Методы расширения Kotlin. - Переименованная
Operation.getException()
toOperation.getThrowable()
. Это нарушающее изменение. - Класс
ContentUriTriggers
и методы, ссылающиеся на него, больше не доступны для публичного использования. Это нарушающее изменение. - Удалили остальные методы Varargs в
WorkManager
,WorkContinuation
иOneTimeWorkRequest
, чтобы упростить API. Чтобы исправить любые проблемы с сборкой, вы можете обернуть существующие Varargs с помощьюArrays.asList(...)
. Мы все еще включаем однопользовательские версии каждого метода. Это нарушающее изменение. - Удаленные варианты
WorkContinuation.combine(OneTimeWorkRequest, *)
. Они представляли запутанный API; Существующие методыcombine
более понятны. Это нарушающее изменение.
Исправления ошибок
- Реализации до маршрута в настоящее время более надежны при восстановлении после смерти процесса уже выполняющейся задачи.
-
LiveData
, которая наблюдается черезobserveForever
отслеживается через WorkManager. Это обратный порт библиотеки комнаты. B/74477406 -
Data.Builder.build()
теперь бросает исключение, если сериализованный объект превышает свой максимальный размер. Ранее это произошло бы только на фоновом потоке, где вы не могли бы правильно справиться с этим. - 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.
Версия 1.0.0-альфа11
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
-
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
.
Версия 1.0.0-альфа10
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
- 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.
Версия 1.0.0-альфа09
September 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' } }
Котлин
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
- 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
Breaking Changes
- The default
Worker
andNonBlockingWorker
constructors are deprecated. Please migrate to the new constructor ASAP. Future versions will remove the default constructor.
Версия 1.0.0-альфа08
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
Версия 1.0.0-альфа07
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
-
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.
Версия 1.0.0-альфа06
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
Версия 1.0.0-альфа05
July 24, 2018
Изменения API
-
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
Breaking Changes
-
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[])
.
Версия 1.0.0-альфа04
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.
Версия 1.0.0-альфа03
June 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
- 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
Behavior Changes
- 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
Breaking Changes
- Renamed
Worker.WorkerResult
toWorker.Result
. -
Worker.onStopped
now has an additionalisCancelled
parameter which is set totrue
when theWorker
has explicitly been cancelled.
Версия 1.0.0-альфа02
May 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
-
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.
Версия 1.0.0-альфа01
May 8, 2018
WorkManager simplifies scheduling and execution of guaranteed, constraint-aware background work. This initial release is 1.0.0-alpha01
.
WorkManager
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
2 октября 2024 г. | 2.9.1 | - | 2.10.0-beta01 | - |
Объявление зависимостей
To add a dependency on WorkManager, you must add the Google Maven repository to your project:
Добавьте зависимости для нужных вам артефактов в файл build.gradle
для вашего приложения или модуля:
классный
dependencies { def work_version = "2.9.1" // (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.9.1" // (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 лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.
Дополнительную информацию см . в документации по системе отслеживания проблем .
Version 2.10
Version 2.10.0-beta01
2 октября 2024 г.
androidx.work:work-*:2.10.0-beta01
is released. Version 2.10.0-beta01 contains these commits .
Version 2.10.0-alpha04
18 сентября 2024 г.
androidx.work:work-*:2.10.0-alpha04
is released. Version 2.10.0-alpha04 contains these commits .
Изменения API
- Add the stop reason
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
for when a foreground worker is stopped due to execution timeout based on the foreground service type. ( Ibd0af )
Version 2.10.0-alpha03
4 сентября 2024 г.
androidx.work:work-*:2.10.0-alpha03
is released. Version 2.10.0-alpha03 contains these commits .
Новые возможности
- Added trace tags to Jobs from
WorkManager
which makes 'adb shell dumpsys jobscheduler' a lot simpler to understand since it will contain the name of the Worker being executed. Trace sections are also added around key areas ofWorkManager
.
Изменения API
- WorkManager 2.10.0 is now compiled with SDK 35.
- Fix foreground workers of type 'short service' and 'data sync' timing out and causing an ANR when
WorkManager
didn't callstopSelf()
. This fix only applies to devices with API 34 and 35 where foreground service types were introduced. ( ca06b2 , b/364508145 ) - New
WorkerParameters
APIs that make it possible to switch the remote process that theWorker
binds to when using aWorkerFactory
. ( Ibdc8a , Ie8a90 , I7373f )
Исправления ошибок
- Fix a crash caused by
WorkManager
attempting to restart a long-running worker (ie a foreground worker) when the foreground type of the work had Android 14 prerequisite permissions that were revoked. ( b/333957914 ) - Убрано ручное определение доступа к API новой платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или новее (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или новее (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется выполнить обновление до D8 версии 8.1 или более поздней. Более подробную информацию можно найти в этой статье . ( Ia60e0 , b/345472586 )
Version 2.10.0-alpha02
17 апреля 2024 г.
androidx.work:work-*:2.10.0-alpha02
is released. Version 2.10.0-alpha02 contains these commits .
Изменения API
- Added the ability to emit trace spans via a configurable
@RestrictTo
Tracer
inWorkManager
. ( I17d7f , b/260214125 ) -
Configuration.workerCoroutineContext
was added to for control of dispatcher whereCoroutineWorker
is executed. It helps to completely avoid usage ofDispatchers.Default
inWorkManager
. ( Icd1b7 ) - Add custom exception handlers for Workers ( Ib1b74 , b/261190695 )
-
OneTimeWorkRequest.Builder
andPeriodicWorkRequest.Builder
can now be constructed withKClass
instead ofClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
( Ib55f6 ) -
WorkManager
class was migrated to Kotlin. Now methods that returnLiveData
,ListenableFuture
orFlow
provides correct nullability information. It could require changes in clients' source code, if nullability assumptions in that code were incorrect. ( If6757 )
Version 2.10.0-alpha01
24 января 2024 г.
androidx.work:work-*:2.10.0-alpha01
is released. Version 2.10.0-alpha01 contains these commits.
Новые возможности
- Developers can specify
NetworkRequest
as a constraint for a worker via theConstraints.setRequiredNetworkRequest
method. This enables more granular control over which network this worker should run.
Изменения API
- Adding an ability to specify
NetworkRequest
as the constraint. ( Id98a1 , b/280634452 )
Version 2.9
Version 2.9.1
7 августа 2024 г.
androidx.work:work-*:2.9.1
is released. Version 2.9.1 contains these commits .
Исправления ошибок
- Fix a crash caused by
WorkManager
attempting to restart a long-running worker (ie a foreground worker) when the foreground type of the work had Android 14 prerequisite permissions that were revoked. ( b/333957914 )
Version 2.9.0
29 ноября 2023 г.
androidx.work:work-*:2.9.0
is released. Version 2.9.0 contains these commits.
Important changes since 2.8.0
- Observability via
Flow
-s. Instead ofLiveData
, Worker's progress now can be observed via Flow's viaWorkManager.getWorkInfosFlow
and similar methods. - Now
WorkManager
provides a hint on why a worker was previously stopped. It can be queried from a worker itself viagetStopReason()
method or fromWorkInfo
viagetStopReason()
. - Precise scheduling of periodic workers via
setNextScheduleTimeOverride
. This allows dynamic calculation of the next Periodic work schedule, which can be used to implement advanced features like adaptive refresh times, custom retry behavior, or making a newsfeed worker run before the user wakes up every morning without drift.ExistingPeriodicWorkPolicy.UPDATE
should be used with these techniques to avoid canceling a currently-running worker while scheduling the next one. - WorkManager's testing with threading matching production.
ExecutorsMode.PRESERVE_EXECUTORS
can be used ininitializeTestWorkManager
to preserve executors set inConfiguration
and to use the real main thread. - Coroutines APIs such as
CoroutineWorker
have been moved from additional artifact work-runtime-ktx to the main artifact work-runtime. work-runtime-ktx is now empty.
Изменения API
-
stopReason
was added toWorkInfo
. It makesstopReason
available after the worker has run. It could be helpful in the reportingstopReason
in a usable way, because once a worker has been stopped, an app itself could be killed very quickly. ( I21386 ) - Allow
Clock
to be set via config and used to drive execution sequencing of Worker tests. ( Ic586e ) -
getStopReason()
method was added toListenableWorker
that gives a hint why the worker was stopped. ( I07060 ) - Added
WorkManagerTestInitHelper#closeWorkDatabase()
to avoid Closeguard's warning about leaked resources. ( Ia8d49 ) -
WorkInfo
's constructor is public now, which can be useful in testing. ( Ia00b6 , b/209145335 ) -
work-runtime-ktx
is now empty,CoroutineWorker
and other Kotlin specific utilities are now available in the main work-runtime artifact. ( I71a9a ) - Added
setNextScheduleTimeOverride
method, which allows accurate setting of periodic work schedules ( I3b4da ) - Added
getNextScheduleTimeMillis
to get scheduled run time info is added toWorkInfo
. ( I797e4 ) - Initial delay and periodicity info are added to
WorkInfo
. ( I52f2f ) - Added method observe workers via Flows via methods
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
( If122a ) - Added missing
@RequiresApi(...)
annotations toConstraints
' constructors and properties. They are now aligned with corresponding annotations on setters inConstraints.Builder
that existed from early versions ofWorkManager
. ( I6d7d2 ) -
WorkManager
now has a separate limit for content uri workers to give them guaranteed slots inJobScheduler
to prevent missing content updates under the high load. The limit can be configured viaConfiguration.Builder.setContentUriTriggerWorkersLimit
. ( Ic128f ) - Constraints are added to
WorkInfo
. ( I162c0 )
Version 2.9.0-rc01
18 октября 2023 г.
androidx.work:work-*:2.9.0-rc01
is released. Version 2.9.0-rc01 contains these commits.
- No changes since the last beta release
Version 2.9.0-beta01
6 сентября 2023 г.
androidx.work:work-*:2.9.0-beta01
is released. Version 2.9.0-beta01 contains these commits.
Изменения API
- Added constants for stop reasons returned by
WorkInfo.stopReason
andListenableWorker.stopReason
( I0cc00 )
Version 2.9.0-alpha02
26 июля 2023 г.
androidx.work:work-*:2.9.0-alpha02
is released. Version 2.9.0-alpha02 contains these commits.
Новые возможности
- Now
WorkManager
provides a hint on why a worker was previously stopped. It can be queried from a worker itself viagetStopReason()
method or fromWorkInfo
viagetStopReason()
.
Изменения API
-
stopReason
was added toWorkInfo
. It makes availablestopReason
after the worker ran. It could be helpful in the reportingstopReason
in usable way, because once a worker has been stopped, an app itself could be very quickly killed. ( I21386 ) - Allow Clock to be set via config and used to drive execution sequencing of Worker tests. ( Ic586e )
-
getStopReason()
method was added toListenableWorker
that gives a hint why the worker was stopped. ( I07060 ) - Added
WorkManagerTestInitHelper#closeWorkDatabase()
to avoid Closeguard's warning about leaked resources. ( Ia8d49 )
Исправления ошибок
- Added ability to bypass
overrideNextScheduleTime
usingTestDriver
and fixed issues with testability. ( Ic2905 )
Version 2.9.0-alpha01
7 июня 2023 г.
androidx.work:work-*:2.9.0-alpha01
is released. Version 2.9.0-alpha01 contains these commits.
Новые возможности
- Observability via
Flow
-s. Instead ofLiveData
, Worker's progress now can be observed via Flow's viaWorkManager.getWorkInfosFlow
and similar methods. - Precise scheduling of periodic workers via
setNextScheduleTimeOverride
. This allows dynamic calculation of the next Periodic work schedule, which can be used to implement advanced features like adaptive refresh times, custom retry behavior, or making a newsfeed worker run before the user wakes up every morning without drift.ExistingPeriodicWorkPolicy.UPDATE
should be used with these techniques to avoid cancelling a currently-running worker while scheduling the next one. -
WorkManager
's testing with threading matching production.ExecutorsMode.PRESERVE_EXECUTORS
can be used to preserve executors set inConfiguration
and to use the real main thread. - Coroutines APIs such as
CoroutineWorker
have been moved from additional artifactwork-runtime-ktx
to the main artifactwork-runtime
.work-runtime-ktx
is now empty.
Изменения API
-
WorkInfo
's constructor is public now, that can be useful in testing. ( Ia00b6 , b/209145335 ) -
work-runtime-ktx
is now empty,CoroutineWorker
and other kotlin specific utilities are now available in the mainwork-runtime
artifact. ( I71a9a ) - Added
setNextScheduleTimeOverride
method, which allows accurate setting of periodic work schedules ( I3b4da ) - Renamed
getEarliestRunTimeMillis
togetNextScheduleTimeMillis
. ( I2bd7a ) - Next scheduled run time info is added to
WorkInfo
. ( I797e4 ) - Initial delay and periodicity info are added to
WorkInfo
. ( I52f2f ) - Added method observe workers via Flows via methods
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
( If122a ) - Added missing
@RequiresApi(...)
annotations to Constraints' constructors and properties. They are now aligned with corresponding annotations on setters inConstraints.Builder
that existed from early versions ofWorkManager
. ( I6d7d2 ) -
WorkManager
now has a separate limit for content uri workers to give them guaranteed slots inJobScheduler
to prevent missing content updates under the high load. Limit can be configured viaConfiguration.Builder.setContentUriTriggerWorkersLimit
. ( Ic128f ) - Constraints are added to
WorkInfo
. ( I162c0 )
Version 2.8
Version 2.8.1
22 марта 2023 г.
androidx.work:work-*:2.8.1
is released. Version 2.8.1 contains these commits.
Исправления ошибок
- Fixed ANR in
RescheduleReceiver
that previously didn't correctly handle two simultaneous broadcasts. ( b/236906724 )
Version 2.8.0
February 8, 2023
androidx.work:work-*:2.8.0
is released. Version 2.8.0 contains these commits.
Important changes since 2.7.0
Новые возможности
- An ability to update
WorkRequests
in a non-intrusive way was added, preserving original enqueue time, chaining etc. See detailed blogpost about this feature, as well as javadocs forWorkManager.updateWork
andExistingPeriodicWorkPolicy.UPDATE
for more details.
Изменения API
-
WorkManager.updateWork
was added to update work preserving its original enqueue time and chaining.( I9a248 , b/219446409 ) -
ExistingPeriodicWorkPolicy.UPDATE
was added. This policy allows updating a periodic work by the name. It is similar to the existingREPLACE
, but it is less intrusive: it doesn't cancel a worker if it is currently running and it preserves enqueue time - initial delay and period are calculated from original enqueue time, rather than update time.REPLACE
was deprecated to decrease a confusion between the very similarly namedREPLACE
andUPDATE
. If you still want to keep the previous semantics ofREPLACE
, the newly addedCANCEL_AND_REENQUEUE
, which is identical toREPLACE
, can be used. ( I985ed , b/219446409 ) - Added the ability to intercept scheduling exceptions providing
Consumer<Throwable>
via setSchedulingExceptionHandler ) - Added the ability to provide
Consumer<Throwable>
via setInitializationExceptionHandler to determine if there were issues when trying to initialize WorkManager. - Inline helpers for
OneTimeWorkRequest
&PeriodicWorkRequest
were moved fromandroidx.work:work-runtime-ktx
toandroidx.work:work-runtime
( I0010f , b/209145335 ) - Helper methods
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
were added to createWorkQuery
directly. ( b/199919736 ) ( If48f2 , b/199919736 ) - Added
getForegroundInfo
toWorker
. ( Ic1ead ) -
RxWorker
both for RxJava 2 and RxJava 3 now hassetForeground
returningCompletable
that can be used instead ofsetForegroundInfoAsync
that returnsListenableFuture
-
RxWorker
both for RxJava 2 and RxJava 3 hasgetForegroundInfo
returningSingle
that can be used instead ofgetForegroundInfoAsync
that returnsListenableFuture
. ( b/203851459 ) - Constraints can now be directly constructed rather than using
Constraints.Builder
, which is convenient for Kotlin users. ( Idc390 , b/137568653 ) - Added the ability to check if
WorkManager
has been initialized. Also, added a newgetConfiguration()
API for library developers to get the configuration thatWorkManager
was initialized with. ( I6eff3 , b/212300336 )
Исправления ошибок
- Fixed an issue with the greedy scheduler that would prevent workers from running immediately when under load. ( I9686b , b/248111307 )
- Добавлен
@RequiresPermission
для API, требующих предоставления разрешенияPOST_NOTIFICATIONS
в SDK 33 и более поздних версиях. ( Ie542e , б/238790278 ) - Propagate cancellations in the
CoroutineScope
to theListenableFuture
when usingsuspendCancellableCoroutine
.
Version 2.8.0-rc01
7 декабря 2022 г.
androidx.work:work-*:2.8.0-rc01
is released. Version 2.8.0-rc01 contains these commits.
Новые возможности
- No new features on this release. This is mainly a version bump
Version 2.8.0-beta02
9 ноября 2022 г.
androidx.work:work-*:2.8.0-beta02
is released. Version 2.8.0-beta02 contains these commits.
Исправления ошибок
- Fixed
equals
method inWorkInfo
, that previously didn't take into account new generation information. ( 4977cc )
Version 2.8.0-beta01
5 октября 2022 г.
androidx.work:work-*:2.8.0-beta01
is released. Version 2.8.0-beta01 contains these commits.
Исправления ошибок
- Fixed an issue with the greedy scheduler that would prevent workers from running immediately when under load. ( I9686b , b/248111307 )
Version 2.8.0-alpha04
7 сентября 2022 г.
androidx.work:work-*:2.8.0-alpha04
is released. Version 2.8.0-alpha04 contains these commits.
Изменения API
-
WorkerInfo.getGeneration()
andWorkerParameters.getGeneration()
were added that return the generation of a worker. A worker has multiple generations, if it was updated viaWorkManager.updateWork
orWorkManager.enqueueUniquePeriodicWork
usingExistingPeriodicWorkPolicy.UPDATE
. Note that If the worker is currently running, it is possible for this method to return a newer generation from that of the currently running worker if an update has happened during an execution of the worker. ( I665c5 , b/219446409 ) ( I128a9 , b/219446409 ) - Added
InitializationExceptionHandler
, an Exception Handler that can be used to determine if there were issues when trying to initializeWorkManager
. ( I061de )
Version 2.8.0-alpha03
10 августа 2022 г.
androidx.work:work-*:2.8.0-alpha03
is released. Version 2.8.0-alpha03 contains these commits.
Новые возможности
- An ability to update
WorkRequests
in a non-intrusive way was added, preserving original enqueue time, chaining etc. SeeWorkManager.updateWork
andExistingPeriodicWorkPolicy.UPDATE
for more details.
Изменения API
-
WorkManager.updateWork
was added to update work preserving its original enqueue time and chaining.( I9a248 , b/219446409 ) -
ExistingPeriodicWorkPolicy.UPDATE
was added. This policy allows to update a periodic work by the name. It is similar to the existingREPLACE
, but it is less intrusive: it doesn't cancel a worker if it is currently running and it preserves enqueue time - initial delay and period are calculated from original enqueue time, rather than update time.REPLACE
was deprecated to decrease a confusion between very similarly namedREPLACE
andUPDATE
. If you still want to keep the previous semantics ofREPLACE
, the newly addedCANCEL_AND_REENQUEUE
, which is identical toREPLACE
, can be used. ( I985ed , b/219446409 ) - Add the ability to intercept scheduling exceptions by defining a
SchedulingExceptionHandler
. ( I033eb ) - Inline helpers for
OneTimeWorkRequest
&PeriodicWorkRequest
were moved fromandroidx.work:work-runtime-ktx
toandroidx.work:work-runtime
( I0010f , b/209145335 )
Исправления ошибок
- Добавлен
@RequiresPermission
для API, требующих предоставления разрешения POST_NOTIFICATIONS в SDK 33 и более поздних версиях. ( Ie542e , б/238790278 )
Version 2.8.0-alpha02
6 апреля 2022 г.
androidx.work:work-*:2.8.0-alpha02
is released. Version 2.8.0-alpha02 contains these commits.
Изменения API
- Constraints can now be directly constructed rather than using Builder, which is convenient for Kotlin users. ( Idc390 , b/137568653 )
- Added the ability to check if
WorkManager
has been initialized. Also, added a newgetConfiguration()
API for library developers to get the configuration thatWorkManager
was initialized with. ( I6eff3 , b/212300336 )
Version 2.8.0-alpha01
12 января 2022 г.
androidx.work:work-*:2.8.0-alpha01
is released. Version 2.8.0-alpha01 contains these commits.
Изменения API
- Helper methods
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
were added to create WorkQuery directly. ( If48f2 , b/199919736 ) - Добавляет экспериментальные методы BuildCompat для будущих SDK ( IAFD82 , B/207528937 )
- Add
getForegroundInfo
toWorker
. ( Ic1ead ) - Helper methods
WorkQuery.fromIds
to create WorkQuery directly from ids were added. ( Ie5bdf , b/199919736 ) - RxWorker now has
setForeground
returningCompletable
that can be used instead ofsetForegroundInfoAsync
that returnsListenableFuture
. ( I85156 ) - RxWorker for RxJava 2 now has
getForegroundInfo
returningSingle
that can be used instead ofgetForegroundInfoAsync
that returnsListenableFuture
. ( I21c91 , b/203851459 ) - RxWorker for RxJava 3 now has
getForegroundInfo
returningSingle
that can be used instead ofgetForegroundInfoAsync
that returnsListenableFuture
. ( I1ca8a ) - RxWorker now has
setForeground
returningCompletable
that can be used instead ofsetForegroundInfoAsync
that returnsListenableFuture
. ( I992a3 , b/203851459 )
Исправления ошибок
- Propagate cancellations in the
CoroutineScope
to theListenableFuture
when usingsuspendCancellableCoroutine
. ( I77e63 )
Версия 2.7
Version 2.7.1
17 ноября 2021 г.
androidx.work:work-*:2.7.1
is released. Version 2.7.1 contains these commits.
Исправления ошибок
- Cancellations in the
CoroutineScope
are propagated to theListenableFuture
when usingsuspendCancellableCoroutine
. ( I77e63 ) - An exception is thrown immediately when delayed work requests are marked as expedited. bef1762
Version 2.7.0
13 октября 2021 г.
androidx.work:work-*:2.7.0
is released. Version 2.7.0 contains these commits.
Important changes since 2.6.0
WorkManager introduces a new
WorkRequest.Builder.setExpedited(...)
API to help with Foreground Service restrictions in Android 12.When using
setExpedited(...)
, WorkManager delegates to expedited jobs in JobScheduler starting Android 12, while providing backwards compatibility on prior versions of Android by delegating to a Foreground Service.
Version 2.7.0-rc01
29 сентября 2021 г.
androidx.work:work-*:2.7.0-rc01
is released. Version 2.7.0-rc01 contains these commits.
This version is identical to androidx.work:work-*:2.7.0-beta01
.
Version 2.7.0-beta01
1 сентября 2021 года
androidx.work:work-*:2.7.0-beta01
is released. Version 2.7.0-beta01 contains these commits.
Новые возможности
- Reduce multi-process SQLite contention when initializing WorkManager.
Изменения API
- Remove
@ExperimentalExpeditedWork
APIs given the underlying platform APIs for Android 12 (S) are stable. ( aosp/1792806 )
Исправления ошибок
- Provide a better error message for expedited workers that do not implement
getForegroundInfoAsync()
. ( aosp/1809376 )
Версия 2.7.0-альфа05
21 июля 2021 года
androidx.work:work-*:2.7.0-alpha05
is released. Version 2.7.0-alpha05 contains these commits.
This release also contains bug fixes from the WorkManager 2.6.0-beta02
release.
Версия 2.7.0-альфа04
2 июня 2021 года
androidx.work:work-*:2.7.0-alpha04
is released.
This release also contains the changes from the 2.6.0-beta01 release.
Изменения API
-
ListenableWorker.setForegroundAsync()
is no longer deprecated. - We recommend using
WorkRequest.Builder.setExpedited(...)
API when possible. To better support situations when the app is not subject to foreground service restrictions , developers can use theListenableWorker.setForegroundAsync()
API. - If
ListenableWorker.setForegroundAsync()
is called, when the app is subject to foreground service restrictions, this will throw the ForegroundServiceStartNotAllowedException .
Исправления ошибок
- When expedited jobs are rescheduled, they are no longer expedited. They become regular jobs.
Версия 2.7.0-альфа03
21 апреля 2021 года
androidx.work:work-*:2.7.0-alpha03
is released. Version 2.7.0-alpha03 contains these commits.
Новые возможности
From WorkManager
2.6.0-alpha02
: Adds support for Workers that can run in any process. ( Iaf200 )From WorkManager
2.6.0-alpha02
: Added aRemoteCoroutineWorker
which is an implementation ofRemoteListenableWorker
that can bind to a remote process. ( I30578 )
Изменения API
- From WorkManager
2.6.0-alpha02
:Added support forTEMPORARILY_UNMETERED
network constraint. ( I08d5e ) - From WorkManager
2.6.0-alpha02
:Multi-process worker support forsetProgressAsync()
. ( Ib6d08 ) - From WorkManager
2.6.0-alpha02
:MakeWorkManagerInitializer
public so otherandroidx.startup.Initializer
s can use these as dependencies. ( I5ab11 )
Версия 2.7.0-альфа02
10 марта 2021 года
androidx.work:work-*:2.7.0-alpha02
is released. Version 2.7.0-alpha02 contains these commits.
Исправления ошибок
- Make
PendingIntent
mutability explicit, to fix a crash when targeting Android 12. ( b/180884673 )
Версия 2.7.0-альфа01
18 февраля 2021 года
androidx.work:work-*:2.7.0-alpha01
is released. Version 2.7.0-alpha01 contains these commits.
Новые возможности
WorkManager introduces a new
WorkRequest.Builder.setExpedited(...)
API to take into account the foreground Service restrictions in Android 12.Applications can no longer launch a foreground service when they are in the background. Therefore, to better support long running work which was previously bound to the lifecycle of a foreground service, applications can mark
WorkRequest
s as expedited .This API is a replacement for the
setForegroundAsync(...)
/setForeground(...)
APIs which are now deprecated .When using
setExpedited(...)
, WorkManager delegates to expedited jobs inJobScheduler
starting Android 12, while providing backwards compatibility on prior versions of Android by delegating to foreground services,
Изменения API
- Add support for expedited
WorkRequest
s.
Версия 2.6.0
Версия 2.6.0
1 сентября 2021 года
androidx.work:work-*:2.6.0
is released. Версия 2.6.0 содержит эти коммиты.
Важные изменения с версии 2.5.0
WorkManager now uses
androidx.startup
to initialize WorkManager. If you usedtools:node="remove"
theContentProvider
being used to initialize WorkManager in the past, then you need to do the following instead.<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" />
Added support for Workers that can run in any process. ( Iaf200 )
Added a
RemoteCoroutineWorker
which is an implementation of RemoteListenableWorker that can bind to a remote process. ( I30578 )
Версия 2.6.0-rc01
4 августа 2021 года
androidx.work:work-*:2.6.0-rc01
is released. Версия 2.6.0-rc01 содержит эти коммиты.
This version is identical to androidx.work:work-*:2.6.0-beta02
.
Version 2.6.0-beta02
21 июля 2021 года
androidx.work:work-*:2.6.0-beta02
is released. Version 2.6.0-beta02 contains these commits.
Исправления ошибок
-
RemoteWorkManager
now correctly unbinds fromRemoteWorkManagerService
which allowsRemoteWorkManagerService
to clean up correctly. aosp/1730694 -
RemoteListenableWorker
now correctly unbinds fromRemoteWorkerService
which allowsRemoteWorkerService
to clean up correctly. aosp/1743817 -
ForceStopRunnable
now only runs in the primary app process. This is an optimization, and avoids resource contention for apps that use multiple processes. aosp/1749180 , aosp/1761729
Версия 2.6.0-бета01
2 июня 2021 года
androidx.work:work-*:2.6.0-beta01
is released. Версия 2.6.0-beta01 содержит эти коммиты.
This release contains some minor documentation improvements. The release is largely identical to 2.6.0-alpha02 .
Версия 2.6.0-альфа02
21 апреля 2021 года
androidx.work:work-*:2.6.0-alpha02
is released. Версия 2.6.0-alpha02 содержит эти коммиты.
Новые возможности
Adds support for Workers that can run in any process. ( Iaf200 )
Added a
RemoteCoroutineWorker
which is an implementation ofRemoteListenableWorker
that can bind to a remote process. ( I30578 )
Изменения API
- Added support for
TEMPORARILY_UNMETERED
network constraint. ( I08d5e ) - Multi-process worker support for
setProgressAsync()
. ( Ib6d08 ) - Make
WorkManagerInitializer
public so otherandroidx.startup.Initializer
s can use these as dependencies. ( I5ab11 )
Версия 2.6.0-альфа01
24 марта 2021 года
androidx.work:work-*:2.6.0-alpha01
is released. Версия 2.6.0-alpha01 содержит эти коммиты.
Новые возможности
WorkManager
now usesandroidx.startup
to initialize WorkManager. Previously, this was being done byandroidx.work.impl.WorkManagerInitializer
. ( aosp/1608813 )If you used
tools:node="remove"
theContentProvider
being used to initialize process lifecycle in the past, then you need to do the following instead.<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
- Add a
Result.getOutputData()
API which returns the ListenableWorker'soutputData
. ( Ie51e3 )
Исправления ошибок
- Add a workaround for an OEM bug which causes a
SecurityException
to be thrown when usingAlarmManager
APIs. ( aosp/1587518 )
Версия 2.5.0
Версия 2.5.0
27 января 2021 года
androidx.work:work-*:2.5.0
is released. Версия 2.5.0 содержит эти коммиты.
Major changes since 2.4.0
- A new
:work:work-multiprocess
artifact for apps that use multiple processes. This introduces performance gains by unifying work request scheduling to a single process.- To use
work-multiprocess
, define a dependency on:implementation "androidx.work:work-multiprocess:2.5.0"
- Designate a primary process using Configuration.Builder.setDefaultProcessName(String) .
- When using
work-multiprocess
you also want to use RemoteWorkManager to manage yourWorkRequest
s. RemoteWorkManager always reaches out to the designated process. The in-process scheduler also runs in the designated process.
- To use
- Sometimes,
ActivityManager
cannot instantiate theJobService
instance, to start a job. This causes the underlying job to get silently dropped because of a platform bug.WorkManager
now ensures that there are backing jobs for every singleWorkRequest
when anApplication
is being initialized by reconciling jobs. This greatly improves job execution reliability. ( b/172475041 , aosp/1489577 ) -
WorkManager
limits database growth by reducing the buffer duration thatWorkRequest
s are tracked after aWorkRequest
is complete. The duration was7
days previously. It has been reduced to1
day + the keepResultsForAtLeast duration. ( aosp/1419708 ) - The
TestListenableWorkerBuilder
now supports the reified class extendingListenableWorker
to make testing easier. ( aosp/1443299 , b/169787349 ) - WorkManager inspector is now available when using Android Studio Arctic Fox.
Версия 2.5.0-rc01
13 января 2021 года
androidx.work:work-*:2.5.0-rc01
is released. Версия 2.5.0-rc01 содержит эти коммиты.
Исправления ошибок
- Fixed a bug where
getWorkInfosLiveData
was not correctly getting invalidated after entities were updated when using theWorkQuery
based API. ( aosp/1540566 , b/173769028 ) - Fixed a bug where database transactions were not being marked as successful in some rare cases. This causes issues on some Motorola devices. ( aosp/1535368 , b/175944460 )
- Fixed a bug to ignore
NoSuchElementException
s when trying to unbind from a dead process. ( aosp/1530589 ) - Improve
ConstraintTrackingWorker
to only stop aListenableWorker
if it's not already been stopped. ( aosp/1496844 , b/172946965 ) - Update androidx.work libraries to target Java 8 ( Ibd2f2 )
Версия 2.5.0-бета02
December 2, 2020
androidx.work:work-*:2.5.0-beta02
is released. Версия 2.5.0-beta02 содержит эти коммиты.
Исправления ошибок
- Fixed a bug in
androidx.work:work-multiprocess
where WorkManager inadvertently blocked the calling thread when trying to bind to the designated process. ( aosp/1475538 ) - Fixed a bug where
PeriodicWorkRequest
s were not being reconciled correctly. ( b/172475041 , aosp/1489577 ) - Added a workaround for a platform bug when stopping the foreground service when using the
setForeground*
APIs. ( b/170924044 , aosp/1489901 )
Версия 2.5.0-бета01
October 28, 2020
androidx.work:work-*:2.5.0-beta01
is released. Версия 2.5.0-beta01 содержит эти коммиты.
Новые возможности
-
WorkManager
automatically throttles the number ofWorkRequest
s that can be picked up by the in-process scheduler. The requests are still executed in FIFO order. ( aosp/1455228 ) -
WorkManager
attempts to recover when the application's datastore is in a bad state. ( aosp/1463103 )
Исправления ошибок
- When
ListenableWorker
s are interrupted, mark themENQUEUED
immediately so they can be subsequently rescheduled. ( aosp/1455618 , b/170273988 )
Версия 2.5.0-альфа03
14 октября 2020 года
androidx.work:work-*:2.5.0-alpha03
is released. Версия 2.5.0-alpha03 содержит эти коммиты.
Изменения API
-
TestListenableWorkerBuilder
andTestWorkerBuilder
do not use raw types. ( I883ad , b/169787349 )
Исправления ошибок
- Use
ApplicationInfo
to determine the name of the default app process. ( b/168716641 , aosp/1429950 ) - Fix the visibility rules for
RemoteWorkManager
andRemoteWorkContinuation
. These APIs are no-longer marked as@Restricted
. ( aosp/1432091 ) - Fix proguard rules for
:work:work-multiprocess
. ( aosp/1432091 ) - Improve notification lifecycles for long running work bound to a foreground service. ( b/168502234 , aosp/1431331 )
Версия 2.5.0-альфа02
September 16, 2020
androidx.work:work-*:2.5.0-alpha02
is released. Версия 2.5.0-alpha02 содержит эти коммиты.
Новые возможности
- Add an API to WorkQuery to be able to use
id
s to queryWorkInfo
s. ( aosp/1412372 , b/157335295 ) - WorkManager better supports apps that use multiple processes with a new artifact (
androidx.work:work-multiprocess:*
). This new artifact helps solve a few problems that large apps encounter including:- WorkManager typically needs to be initialized in every app process. This is not great because there is increased SQLite contention which in turn causes other problems. WorkManager now has new APIs which can be used to designate a primary app process using
Configuration#setDefaultProcessName(processName)
. TheprocessName
is a fully qualified process name which looks likepackageName:processName
(egcom.example:remote
). - A set of new APIs:
RemoteWorkManager
andRemoteWorkContinuation
toenqueue
,cancel
andquery
work requests. These APIs do not includeLiveData
variants to avoid SQLite contention across multiple-processes. All calls toenqueue
,cancel
andquery
are forwarded to aprimary
app process using AIDL and return a fluentListenableFuture
. ( aosp/1392657 , aosp/1411210 , aosp/1412215 , aosp/1417713 )
- WorkManager typically needs to be initialized in every app process. This is not great because there is increased SQLite contention which in turn causes other problems. WorkManager now has new APIs which can be used to designate a primary app process using
Изменения API
- WorkManager now prunes completed
WorkRequest
s that have no incomplete dependencies more aggressively. The buffer duration changed from7
days to1
day. ( aosp/1419708 )
Исправления ошибок
- WorkManager now reconciles jobs proactively so
WorkRequest
s andJobScheduler
jobs are in sync whenWorkManager
is initialized. ( aosp/1412794 , b/166292069 )
Версия 2.5.0-альфа01
August 19, 2020
androidx.work:work-*:2.5.0-alpha01
is released. Версия 2.5.0-alpha01 содержит эти коммиты.
Новые возможности
- Changes to internal APIs that allow us to provide better tooling with
WorkManager
going forward. Stay tuned for additional updates.
Исправления ошибок
- Handle
SecurityException
s when tracking network state on some devices. ( aosp/1396969 )
Внешний вклад
- Fix documentation for
ArrayCreatingInputMerger
by Zac Sweers ( github/43 ).
Версия 2.4.0
Версия 2.4.0
22 июля 2020 года
androidx.work:work-*:2.4.0
is released. Версия 2.4.0 содержит эти коммиты.
Major changes since 2.3.0
-
WorkManager
s in-process scheduler is now more capable. Previously, the in-processScheduler
would only consider executing work that was not delayed and whose constraints were met. Now, the in-process scheduler tracksWorkRequest
s which might be executed in the future, including PeriodicWorkRequests. The in-processScheduler
also does not observe scheduling limits (but is still restricted to the size of theExecutor
being used by WorkManager). This means that the application can now execute a lot more WorkRequests when the app is in the foreground. To manage execution of delayed work in the foreground,WorkManager
also introduces a new configurableRunnableScheduler
. ( aosp/1185778 ) - WorkManager now supports RxJava 3. To use RxJava 3, you should include the following dependency:
implementation "androidx.work:work-rxjava3:2.4.0"
. ( aosp/1277904 ) - Added the ability to query for
WorkInfo
s by using aWorkQuery
. This is useful when developers want to queryWorkInfo
s by a combination of multiple attributes. For more information look atWorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
orWorkQuery.Builder.fromUniqueWorkNames(...)
. ( aosp/1253230 , b/143847546 ) Add the ability to request diagnostic information from
WorkManager
using:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
This provides a lot of useful information including:
- WorkRequests that were completed in the last 24 hours.
- WorkRequests that are currently RUNNING.
- Scheduled WorkRequests. ( aosp/1235501 )
Add
ExistingWorkPolicy.APPEND_OR_REPLACE
which is similar toAPPEND
, but replaces a chain that has cancelled or failed prerequisites. ( b/134613984 , aosp/1199640 )Provide the ability to add a custom
RunnableScheduler
to track WorkRequests that need to be executed in the future. This is used by the in-process Scheduler. ( aosp/1203944 )Add support for dynamically adding factories to delegate to, when using a
DelegatingWorkerFactory
. ( b/156289105 , aosp/1309745 )Align tracking for
BATTERY_NOT_LOW
constraints more closely with the platform. ( aosp/1312583 )The in-process scheduler now uses better APIs to determine the name of the process. This is useful to better support apps that use multiple-processes. ( aosp/1324732 )
New Lint rules which enforce:
- Use of the right
foregroundServiceType
when usingsetForegroundAsync()
APIs. ( b/147873061 , aosp/1215915 ) - Specifying JobScheduler ids that WorkManager should use when using JobService APIs directly. aosp/1223567
- Added a new lint rule that ensures that
ListenableWorker
implementations are nowpublic
when using the defaultWorkerFactory
. ( aosp/1291262 )
- Use of the right
Calls to
setForegroundAsync()
that do not complete before completion of aListenableWorker
will now be signalled via anIllegalStateException
on the returnedListenableFuture
. ( aosp/1262743 )Fix a bug where the
ForegroundService
is not stopped after a foregroundWorker
is interrupted. ( b/155579898 , aosp/1302153 )Fix a bug where
WorkManager
attempts to execute multiple instances of aWorker
bound to a Foreground Service ( b/156310133 , aosp/1309853 )
Версия 2.4.0-rc01
June 24, 2020
androidx.work:work-*:2.4.0-rc01
is released. Версия 2.4.0-rc01 содержит эти коммиты.
Исправления ошибок
- The in-process scheduler now uses better APIs to determine the name of the process. This is useful to better support apps that use multiple-processes. ( aosp/1324732 )
Версия 2.4.0-бета01
May 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
, and androidx.work:work-testing:2.4.0-beta01
are released. Версия 2.4.0-beta01 содержит эти коммиты.
Исправления ошибок
- Fix a bug where the
ForegroundService
is not stopped after a foregroundWorker
is interrupted. ( b/155579898 , aosp/1302153 ) - Fix a bug where
WorkManager
attempts to execute multiple instances of aWorker
bound to a Foreground Service ( b/156310133 , aosp/1309853 ) - Add support for dynamically adding factories to delegate to, when using a
DelegatingWorkerFactory
. ( b/156289105 , aosp/1309745 ) - Align tracking for
BATTERY_NOT_LOW
constraints more closely with the platform. ( aosp/1312583 )
Версия 2.4.0-Alpha03
April 29, 2020
androidx.work:work-*:2.4.0-alpha03
is released. Версия 2.4.0-Alpha03 содержит эти коммиты.
Новые возможности
- WorkManager now supports RxJava 3. To use RxJava 3, you should include the following dependency:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
. ( aosp/1277904 ) - Added a new lint rule that ensures that
ListenableWorker
implementations are nowpublic
when using the defaultWorkerFactory
. ( aosp/1291262 )
Изменения API
- Calling
setProgressAsync()
after aListenableWorker
has finished execution will now signal anException
via theListenableFuture
. ( aosp/1285494 ) -
WorkQuery.Builder
is now markedfinal
. ( aosp/1275037 ) -
WorkQuery.Builder
factory methodswithStates
,withTags
andwithUniqueWorkNames
have been renamed tofromStates
,fromTags
andfromUniqueWorkNames
respectively. ( aosp/1280287 )
Исправления ошибок
- Ignore
SecurityException
s when tracking network state of a device. ( b/153246136 , aosp/1280813 )
Версия 2.4.0-Alpha02
April 1, 2020
androidx.work:work-*:2.4.0-alpha02
is released. Версия 2.4.0-Alpha02 содержит эти коммиты.
Новые возможности
- Added a new Lint rule that warns when
WorkRequest
s requires bothConstraints.setRequiresCharging(...)
andConstraints.setRequiresDeviceIdle(...)
. Some devices are never charging and idle at the same time. So such requests would run less frequently than expected. ( aosp/1253840 )
Изменения API
Added the ability to query for
WorkInfo
s by using aWorkQuery
. This is useful when developers want to queryWorkInfo
s by a combination of multiple attributes. For more information look atWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
orWorkQuery.Builder withUniqueWorkNames(...)
. ( aosp/1253230 , b/143847546 )Calls to
setForegroundAsync()
that do not complete before completion of aListenableWorker
will now be signalled via anIllegalStateException
on the returnedListenableFuture
. ( aosp/1262743 )
Исправления ошибок
- Fixed the lint rule that checks for invalid interval durations for
PeriodicWorkRequest
s. ( aosp/1254846 , b/152606442 )
Версия 2.4.0-Alpha01
March 4, 2020
androidx.work:work-*:2.4.0-alpha01
is released. Версия 2.4.0-Alpha01 содержит эти коммиты.
Новые возможности
WorkManager
s in-process scheduler is now more capable. Previously, the in-process Scheduler would only consider executing work that was not delayed and whose constraints were met. Now, the in-process scheduler tracksWorkRequest
s which might be executed in the future, includingPeriodicWorkRequest
s. The in-process Scheduler also does not observe scheduling limits (but is still restricted to the size of theExecutor
being used by WorkManager). This means that the application can now execute a lot moreWorkRequest
s when the app is in the foreground. ( aosp/1185778 )Added the ability to request diagnostic information from WorkManager using
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. This provides a lot of useful information including:- WorkRequests that were completed in the last 24 hours.
- WorkRequests that are currently RUNNING.
- Scheduled WorkRequests. ( aosp/1235501 )
New Lint rules which enforce:
- Use of the right
foregroundServiceType
when usingsetForegroundAsync()
APIs. ( b/147873061 , aosp/1215915 ) - Specifying
JobScheduler
ids thatWorkManager
should use when usingJobService
APIs directly. ( aosp/1223567 )
- Use of the right
Изменения API
Add
ExistingWorkPolicy.APPEND_OR_REPLACE
which is similar toAPPEND
, but replaces a chain that has cancelled or failed prerequisites. ( b/134613984 , aosp/1199640 )Provide the ability to add a custom
RunnableScheduler
to trackWorkRequest
s that need to be executed in the future. This is used by the in-process Scheduler. ( aosp/1203944 )
Исправления ошибок
- Deprecated
setProgress()
inRxWorker
because it previously returned aSingle<Void>
which is an impossible type. Added a new APIsetCompletableProgress()
which returns aCompletable
instead; and added new Lint rules which help migrate to the new APIs. ( b/150080946 , aosp/1242665 )
Version 2.3.4
Version 2.3.4
18 марта 2020 года
androidx.work:work-*:2.3.4
is released. Version 2.3.4 contains these commits.
Исправления ошибок
- Fixed a bug which would cause multiple instances of a long running
Worker
s to run, after exceeding the 10 minute execution window. ( aosp/1247484 , b/150553353 ) - Fix for WorkManager's lint
IssueRegistry
. Thank you @ZacSweers from Slack, for the contribution. ( aosp/1217923 )
Version 2.3.3
Version 2.3.3
March 4, 2020
androidx.work:work-*:2.3.3
is released. Version 2.3.3 contains these commits.
Исправления ошибок
- Fixed a bug where if a
Worker
was interrupted, it would not get rescheduled correctly. ( b/150325687 , aosp/1246571 )
Version 2.3.2
Version 2.3.2
19 февраля 2020 года
androidx.work:work-*:2.3.2
are released. Version 2.3.2 contains these commits.
Исправления ошибок
- Fixes an issue where WorkManager exceeds the 100 job limit in JobScheduler in rare cases. ( aosp/1226859 , b/149092520 )
- Fix for a race condition in ConstraintControllers. ( aosp/1220100 )
- Improved the management foreground Service lifecycle for long running Workers. ( aosp/1226295 )
- Improved the management of cancellation of Notifications for long running Workers upon Worker cancellation. ( aosp/1228346 )
Version 2.3.1
Version 2.3.1
February 5, 2020
androidx.work:work-*:2.3.1
is released. Version 2.3.1 contains these commits .
Исправления ошибок
- Better manage the lifecycle of
Notification
s for long runningWorker
s that run when a foregroundService
is active. ( aosp/1218539 , b/147249312 ) -
WorkManager
now depends onandroidx.sqlite:sqlite-framework:2.1.0
stable. ( aosp/1217729 ) - Added lint rules to ensure that a
foregroundServiceType
is specified in theAndroidManifest.xml
when usingforegroundServiceType
s inForegroundInfo
. ( aosp/1214207 , b/147873061 )
Версия 2.3.0
Версия 2.3.0
January 22, 2020
androidx.work:work-*:2.3.0
is released with no changes since 2.3.0-rc01
. Version 2.3.0 contains these commits .
Важные изменения с 2.2.0
- Support for long running or important work via
ListenableWorker#setForegroundAsync()
. - Support for Worker Progress via
ListenableWorker#setProgressAsync()
. - WorkManager now packages additional lint rules as part of the library which helps catch bugs early.
Версия 2.3.0-RC01
January 8, 2020
androidx.work:work-*:2.3.0-rc01
is released. Version 2.3.0-rc01 contains these commits .
This release is identical to 2.3.0-beta02
Исправления ошибок
- The
work-testing
artifact now defines anapi
dependency onwork-runtime-ktx
. ( aosp/1194410 )
Версия 2.3.0-бета02
18 декабря 2019 г.
androidx.work:work-*:2.3.0-beta02
is released. Version 2.3.0-beta02 contains these commits .
Новые возможности
- Added a better error message for non-recoverable SQLite exceptions. ( aosp/1185777 )
- Added a lint rule which ensures that the content provider
androidx.work.impl.WorkManagerInitializer
is removed from theAndroidManifest.xml
when using on demand initialization. ( aosp/1167007 ) - Added a lint warning when
enqueue()
is used for aPeriodicWorkRequest
instead ofenqueueUniquePeriodicWork()
. ( aosp/1166032 )
API changes
-
ForegroundInfo
now requires you to specify thenotificationId
to be used when usingListenableWorker.setForegroundAsync()
. This is a breaking change. This allows you to run multiple long runningWorker
s in parallel.WorkManager
also better manages lifetimes of the providedNotification
s. ( b/145473554 , aosp/1181208 , asop/1181216 , asop/1183577 )
Исправления ошибок
- Fixed a bug in the AlarmManager implementation where alarms were not being cleaned up correctly. ( aosp/1156444 )
- Fixed a bug where an empty list of
WorkRequest
s would cause an incorrectWorkContinuation
chain to be built. ( b/142835274 , aosp/1157051 )
Dependency changes
- WorkManager now uses Room 2.2.2.
Версия 2.3.0-бета01
20 ноября 2019 года
androidx.work:work-*:2.3.0-beta01
is released. Version 2.3.0-beta01 contains these commits .
Новые возможности
- Added a new lint rule which prevents developer errors due to incorrect implementation of
androidx.work.Configuration.Provider
when using on-demand initialization. aosp/1164559
Версия 2.3.0-Alpha03
23 октября 2019 года
androidx.work:work-*:2.3.0-alpha03
is released. Version 2.3.0-alpha03 contains these commits .
Новые возможности
- Added
WorkManager.createCancelPendingIntent()
API which makes it easy to cancelWorkRequest
s without having to register another component in theAndroidManifest.xml
. This API makes it especially easy to cancelWorkRequest
s fromNotification
s. We expect this to be paired with the new foreground APIs in 2.3.0. - WorkManager now depends on
androidx.room:*:2.2.0
stable.
API changes
- Renamed
ForegroundInfo.getNotificationType()
toForegroundInfo.getForegroundServiceType()
to be more consistent with the underlying platform APIs. ( b/142729893 , aosp/1143316 )
Исправления ошибок
- Fixed a bug which is caused by an unnecessary call to
setTransactionSuccessful()
outside of a transaction. This happens for rare migrations. ( b/142580433 , aosp/1141737 )
Версия 2.3.0-Alpha02
9 октября 2019 года
androidx.work:work-*:2.3.0-alpha02
is released. Version 2.3.0-alpha02 contains these commits .
Новые возможности
- WorkManager now supports running long running or important work that should be kept alive by the OS. For more information look at
ListenableWorker#setForegroundAsync()
(orCoroutineWorker#setForeground()
for Kotlin). ( aosp/1133636 )
API changes
- The
containsKey
API inData
is renamed tohasKeyWithValueOfType
. The corresponding extension method in thektx
library has also been renamed. ( b/141916545 )
Исправления ошибок
- WorkManager schedules work fairly when the number of
WorkRequest
s enqueued approach scheduling limits . ( aosp/1105766 ) - WorkManager calls
ListenableWorker#onStopped()
only if the work is not already completed. ( b/140055777 ) - WorkManager now removes progress information when a worker gets interrupted or reaches its terminal state. ( aosp/1114572 )
-
Data
now has a much more usefultoString()
representation. ( b/140945323 ) -
Data
now has a betterequals()
method. It also supportsdeepEquals
forArray
types. ( b/140922528 ) - WorkManager now stores its internal database and preference files in a no backup directory. ( b/114808216 )
Версия 2.3.0-Alpha01
22 августа 2019 г.
androidx.work:work-*:2.3.September 5, 20190-alpha01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Новые возможности
-
ListenableWorker
s can now set progress via thesetProgressAsync()
API. Also added a correspondingsuspend
-ingsetProgress
API inCoroutineWorker
and asetProgress
inRxWorker
which returns aSingle<Void>
. With these new APIs Workers can convey progress information viaWorkInfo
which has a correspondinggetProgress
API. ( b/79481554 ) -
Data
has acontainsKey()
API which can be used to validate that input data toWorker
s has keys with the expected type. ( b/117136838 ) -
Data
can now be serialized usingData.toByteArray()
andData.fromByteArray()
. Note that there are no versioning guarantees withData
so you should not persist it or use it for IPC between applications. They are only safe to be used between multiple processes of the same application. - Added the ability to specify an
InputMergerFactory
viaConfiguration.setInputMergerFactory
. ( b/133273159 )
API changes
- WorkManager will throw an instance of
IllegalStateException
if aWorkerFactory
returns an instance ofListenableWorker
which has been previously invoked. ( b/139554406 ) - Documentation updates around
ListenableFuture
cancellation and theonStopped()
callback inListenableWorker
. ( b/138413671 )
Исправления ошибок
- The in-process Scheduler now ignores
WorkRequest
s with theidle
constraint. These requests are now only picked up byJobScheduler
when the device is actuallyidle
. ( aosp/1089779 ) -
TestScheduler
now correctly uses the specifiedExecutor
for its internal task executor in tests. ( aosp/1090749 )
Версия 2.2.0
Версия 2.2.0
August 15, 2019
androidx.work:work-*:2.2.0
is released. Коммуты, включенные в эту версию, можно найти здесь .
This release is identical to androidx.work:work-*:2.2.0-rc01
.
Important Changes in 2.2.0 from 2.1.0
androidx.work:work-gcm:2.2.0
is a new Maven artifact which supports the use of GCMNetworkManager as a scheduler when Google Play Services is available for API levels <= 22. This is an optional dependency that helps with more reliable and performant background processing on older API versions. If your app uses Google Play Services, add this dependency to your gradle file to automatically get GCMNetworkManager support. If Play Services is not available, WorkManager will continue to fall back to AlarmManager on older devices.
Версия 2.2.0-RC01
July 30, 2019
androidx.work:work-*:2.2.0-rc01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Fixed a bug in the AlarmManager implementation that causes the Service to shutdown prematurely and resulting in a
RejectedExecutionException
in rare cases. ( aosp/1092374 ) ( b/138238197 ). - Added a workaround for a
NullPointerException
when usingJobScheduler
APIs on some devices. ( aosp/1091020 ) ( b/138364061 ), ( b/138441699 )
Version 2.2.0-beta02
July 19, 2019
androidx.work:work-*:2.2.0-beta02
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Removed unintentional jacoco dependency that was introduced in
2.2.0-beta01
.
Версия 2.2.0-бета01
July 17, 2019
androidx.work:work-*:2.2.0-beta01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Новые возможности
-
androidx.work:work-gcm:2.2.0-beta01
is a new Maven artifact which supports the use of GCMNetworkManager as a scheduler when Google Play Services is available for API levels <= 22. This is an optional dependency that helps with more reliable and performant background processing on older API versions. If your app uses Google Play Services, add this dependency to your gradle file to automatically get GCMNetworkManager support. If Play Services is not available, WorkManager will continue to fall back to AlarmManager on older devices.
Исправления ошибок
- Fix for
IllegalArgumentException
when tracking network state on Nvidia Shield K1 tablets. ( aosp/1010188 )
Версия 2.1.0
Версия 2.1.0
July 11, 2019
androidx.work:work-*:2.1.0
is released. This release is identical to androidx.work:work-*:2.1.0-rc01
.
Important changes since 2.0.1
-
work-runtime-ktx
now requires Java 8. If you run into any issues, you can add the following to yourbuild.gradle
:kotlinOptions { jvmTarget = "1.8" }
- Added on-demand initialization for WorkManager, which will create WorkManager only when referenced. b/127497100 To set up your project for on-demand initialization:
- Disable the automatic initializer .
- Implement
Configuration.Provider
on your customApplication
object. - Change all references of
WorkManager.getInstance()
toWorkManager.getInstance(Context)
. As part of this change, we have deprecatedWorkManager.getInstance()
. It is always safer to call the newWorkManager.getInstance(Context)
replacement, even if you're not doing on-demand initialization.
-
PeriodicWorkRequest
s now support initial delays. You can use thesetInitialDelay
method onPeriodicWorkRequest.Builder
to set an initial delay. b/111404867 - Added the ability to delegate to one or more registered
WorkerFactory
s usingDelegatingWorkerFactory
. b/131435993 - Added the ability to customize the
Executor
used by WorkManager for all its internal book-keeping viaConfiguration.Builder.setTaskExecutor
. - Added the ability to create unit testable
Worker
andListenableWorker
classes by usingTestWorkerBuilder
andTestListenableWorkerBuilder
in thework-testing
artifact.- Note that
work-testing
now pulls in Kotlin as a dependency and includes several Kotlin extensions by default.
- Note that
- Added run attempt count to
WorkInfo
. b/127290461 -
Data
types can now store and retrieve bytes and byte arrays. This does NOT change the maximum size ofData
objects. - WorkManager now depends on
Room 2.1.0
, which should fix some database issues.
Версия 2.1.0-RC01
June 27, 2019
androidx.work:work-*:2.1.0-rc01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Fixed a bug which would cause an application to crash when executing jobs with
JobScheduler
while a backup was in progress b/135858602 .
Version 2.1.0-beta02
June 20, 2019
androidx.work:work-*:2.1.0-beta02
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
-
TestListenableWorkerBuilder
now uses the correctWorkerFactory
when creating instances ofListenableWorker
. b/135275844 - Fixed a bug which caused drifts in the execution windows for
WorkRequest
s due to process death. b/135272196
Версия 2.1.0-beta01
13 июня 2019 года
androidx.work:work-*:2.1.0-beta01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- WorkManager now depends on
Room 2.1.0
, which should fix some database issues. - Removed some startup disk I/O on the main thread.
- Fixed a potential deadlock in constraint tracking. b/134361006
- Preemptively cancelled invalid jobs attributed to WorkManager. b/134058261
- Added some defensive calls to JobScheduler APIs for misbehaving devices.
Version 2.1.0-alpha03
June 5, 2019
androidx.work:*:2.1.0-alpha03
is released.
Исправления ошибок
- Improved documentation for
PeriodicWorkRequest
s. -
WorkManagerTestInitHelper
now uses the correct background executor for tests. - Fixes for SQLite issues when dealing with large transactions on some devices. ( b/130182503 )
- WorkManager's dependencies are now more granular. ( b/133169148 ).
- Workaround OEM specific bugs in the implementation of
JobScheduler
when scheduling jobs using WorkManager. - Improvements in the AlarmManager based scheduler around service lifetimes that previously caused rare crashes. ( b/133313734 )
Version 2.1.0-alpha02
May 16, 2019
WorkManager 2.1.0-alpha02 is released. This version contains several new APIs.
Изменения API
PeriodicWorkRequest
s now support initial delays. You can use thesetInitialDelay
method onPeriodicWorkRequest.Builder
to set an initial delay. b/111404867Added the ability to delegate to one or more registered
WorkerFactory
s usingDelegatingWorkerFactory
. b/131435993Added the ability to customize the
Executor
used by WorkManager for all its internal book-keeping viaConfiguration.Builder.setTaskExecutor
.Improved documentation around
WorkRequest.keepResultsForAtLeast
( b/130638001 ), on-demand initialization, andPeriodicWorkRequest.Builder
( b/131711394 ).
Version 2.1.0-alpha01
April 24, 2019
WorkManager 2.1.0-alpha01 is released. This version contains several new APIs. Please note that starting with this version, there will be new features that won't get backported to the 1.x release. We recommend switching to 2.x.
Изменения API
- Added on-demand initialization for WorkManager, which will create WorkManager only when referenced. b/127497100 To set up your project for on-demand initialization:
- Disable the automatic initializer .
- Implement
Configuration.Provider
on your customApplication
object. - Change all references of
WorkManager.getInstance()
toWorkManager.getInstance(Context)
. As part of this change, we have deprecatedWorkManager.getInstance()
. It is always safer to call the newWorkManager.getInstance(Context)
replacement, even if you're not doing on-demand initialization.
- Added the ability to create unit testable
Worker
andListenableWorker
classes by usingTestWorkerBuilder
andTestListenableWorkerBuilder
in thework-testing
artifact.- Note that
work-testing
now pulls in Kotlin as a dependency, but also includes several Kotlin extensions by default.
- Note that
- Added run attempt count to
WorkInfo
. b/127290461 -
Data
types can now store and retrieve bytes and byte arrays. This does NOT change the maximum size ofData
objects. - Deprecated
CoroutineWorker.coroutineContext
. This field was incorrectly typed as aCoroutineDispatcher
; you should no longer need it as you can go to the desired coroutineContext yourself in the body of the suspending function. -
RxWorker.createWork()
andRxWorker.getBackgroundScheduler()
are now annotated with@NonNull
return types.
Version 2.0.1
Version 2.0.1
April 9, 2019
WorkManager 2.0.1 is released. This release is identical to 2.0.1-rc01 .
Version 2.0.1-rc01
April 3, 2019
WorkManager 2.0.1-rc01 is released. This version contains some bug fixes. For legacy 1.x users, some of these changes also appear in 1.0.1-rc01 .
Исправления ошибок
- 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 - Updated documentation for
PeriodicWorkRequest
s to indicate that flex time is not supported on API 23. - Fixed some broken links in the Kotlin documentation.
Version 2.0.0
Version 2.0.0
March 20, 2019
WorkManager 2.0.0 is released. This version is identical to 2.0.0-rc01 and is the AndroidX version of 1.0.0 stable with AndroidX dependencies. We recommend targeting this version instead of the legacy 1.x versions. All active development will target 2.x and 1.x will only receive critical bug fixes for a limited time.
Version 2.0.0-rc01
March 7, 2019
WorkManager 2.0.0-rc01 is released. This version is identical to 1.0.0 stable but has AndroidX dependencies. Once this reaches 2.0.0 stable, you should include this version and the legacy 1.x versions will only receive some critical bug fixes. All active development will target 2.x.
Pre-AndroidX Dependencies
Reference docs: 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
April 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.
Версия 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
Версия 1.0.0-бета04
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.
Версия 1.0.0-бета03
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.
Версия 1.0.0-бета02
January 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
Версия 1.0.0-бета01
December 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).
Версия 1.0.0-альфа13
December 12, 2018
This release contains a minor API change that will be helpful for some Kotlin users.
Изменения API
-
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
.
Версия 1.0.0-альфа12
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
- 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.
Версия 1.0.0-альфа11
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
-
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
.
Версия 1.0.0-альфа10
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
- 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.
Версия 1.0.0-альфа09
September 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' } }
Котлин
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
- 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
Breaking Changes
- The default
Worker
andNonBlockingWorker
constructors are deprecated. Please migrate to the new constructor ASAP. Future versions will remove the default constructor.
Версия 1.0.0-альфа08
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
Версия 1.0.0-альфа07
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
-
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.
Версия 1.0.0-альфа06
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
Версия 1.0.0-альфа05
July 24, 2018
Изменения API
-
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
Breaking Changes
-
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[])
.
Версия 1.0.0-альфа04
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.
Версия 1.0.0-альфа03
June 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
- 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
Behavior Changes
- 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
Breaking Changes
- Renamed
Worker.WorkerResult
toWorker.Result
. -
Worker.onStopped
now has an additionalisCancelled
parameter which is set totrue
when theWorker
has explicitly been cancelled.
Версия 1.0.0-альфа02
May 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
-
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.
Версия 1.0.0-альфа01
May 8, 2018
WorkManager simplifies scheduling and execution of guaranteed, constraint-aware background work. This initial release is 1.0.0-alpha01
.
WorkManager
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
2 октября 2024 г. | 2.9.1 | - | 2.10.0-beta01 | - |
Объявление зависимостей
To add a dependency on WorkManager, you must add the Google Maven repository to your project:
Добавьте зависимости для нужных вам артефактов в файл build.gradle
для вашего приложения или модуля:
классный
dependencies { def work_version = "2.9.1" // (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.9.1" // (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 лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.
Дополнительную информацию см . в документации по системе отслеживания проблем .
Version 2.10
Version 2.10.0-beta01
2 октября 2024 г.
androidx.work:work-*:2.10.0-beta01
is released. Version 2.10.0-beta01 contains these commits .
Version 2.10.0-alpha04
18 сентября 2024 г.
androidx.work:work-*:2.10.0-alpha04
is released. Version 2.10.0-alpha04 contains these commits .
Изменения API
- Add the stop reason
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
for when a foreground worker is stopped due to execution timeout based on the foreground service type. ( Ibd0af )
Version 2.10.0-alpha03
4 сентября 2024 г.
androidx.work:work-*:2.10.0-alpha03
is released. Version 2.10.0-alpha03 contains these commits .
Новые возможности
- Added trace tags to Jobs from
WorkManager
which makes 'adb shell dumpsys jobscheduler' a lot simpler to understand since it will contain the name of the Worker being executed. Trace sections are also added around key areas ofWorkManager
.
Изменения API
- WorkManager 2.10.0 is now compiled with SDK 35.
- Fix foreground workers of type 'short service' and 'data sync' timing out and causing an ANR when
WorkManager
didn't callstopSelf()
. This fix only applies to devices with API 34 and 35 where foreground service types were introduced. ( ca06b2 , b/364508145 ) - New
WorkerParameters
APIs that make it possible to switch the remote process that theWorker
binds to when using aWorkerFactory
. ( Ibdc8a , Ie8a90 , I7373f )
Исправления ошибок
- Fix a crash caused by
WorkManager
attempting to restart a long-running worker (ie a foreground worker) when the foreground type of the work had Android 14 prerequisite permissions that were revoked. ( b/333957914 ) - Убрано ручное определение доступа к API новой платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или новее (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или новее (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется выполнить обновление до D8 версии 8.1 или более поздней. Более подробную информацию можно найти в этой статье . ( Ia60e0 , b/345472586 )
Version 2.10.0-alpha02
17 апреля 2024 г.
androidx.work:work-*:2.10.0-alpha02
is released. Version 2.10.0-alpha02 contains these commits .
Изменения API
- Added the ability to emit trace spans via a configurable
@RestrictTo
Tracer
inWorkManager
. ( I17d7f , b/260214125 ) -
Configuration.workerCoroutineContext
was added to for control of dispatcher whereCoroutineWorker
is executed. It helps to completely avoid usage ofDispatchers.Default
inWorkManager
. ( Icd1b7 ) - Add custom exception handlers for Workers ( Ib1b74 , b/261190695 )
-
OneTimeWorkRequest.Builder
andPeriodicWorkRequest.Builder
can now be constructed withKClass
instead ofClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
( Ib55f6 ) -
WorkManager
class was migrated to Kotlin. Now methods that returnLiveData
,ListenableFuture
orFlow
provides correct nullability information. It could require changes in clients' source code, if nullability assumptions in that code were incorrect. ( If6757 )
Version 2.10.0-alpha01
24 января 2024 г.
androidx.work:work-*:2.10.0-alpha01
is released. Version 2.10.0-alpha01 contains these commits.
Новые возможности
- Developers can specify
NetworkRequest
as a constraint for a worker via theConstraints.setRequiredNetworkRequest
method. This enables more granular control over which network this worker should run.
Изменения API
- Adding an ability to specify
NetworkRequest
as the constraint. ( Id98a1 , b/280634452 )
Version 2.9
Version 2.9.1
7 августа 2024 г.
androidx.work:work-*:2.9.1
is released. Version 2.9.1 contains these commits .
Исправления ошибок
- Fix a crash caused by
WorkManager
attempting to restart a long-running worker (ie a foreground worker) when the foreground type of the work had Android 14 prerequisite permissions that were revoked. ( b/333957914 )
Version 2.9.0
29 ноября 2023 г.
androidx.work:work-*:2.9.0
is released. Version 2.9.0 contains these commits.
Important changes since 2.8.0
- Observability via
Flow
-s. Instead ofLiveData
, Worker's progress now can be observed via Flow's viaWorkManager.getWorkInfosFlow
and similar methods. - Now
WorkManager
provides a hint on why a worker was previously stopped. It can be queried from a worker itself viagetStopReason()
method or fromWorkInfo
viagetStopReason()
. - Precise scheduling of periodic workers via
setNextScheduleTimeOverride
. This allows dynamic calculation of the next Periodic work schedule, which can be used to implement advanced features like adaptive refresh times, custom retry behavior, or making a newsfeed worker run before the user wakes up every morning without drift.ExistingPeriodicWorkPolicy.UPDATE
should be used with these techniques to avoid canceling a currently-running worker while scheduling the next one. - WorkManager's testing with threading matching production.
ExecutorsMode.PRESERVE_EXECUTORS
can be used ininitializeTestWorkManager
to preserve executors set inConfiguration
and to use the real main thread. - Coroutines APIs such as
CoroutineWorker
have been moved from additional artifact work-runtime-ktx to the main artifact work-runtime. work-runtime-ktx is now empty.
Изменения API
-
stopReason
was added toWorkInfo
. It makesstopReason
available after the worker has run. It could be helpful in the reportingstopReason
in a usable way, because once a worker has been stopped, an app itself could be killed very quickly. ( I21386 ) - Allow
Clock
to be set via config and used to drive execution sequencing of Worker tests. ( Ic586e ) -
getStopReason()
method was added toListenableWorker
that gives a hint why the worker was stopped. ( I07060 ) - Added
WorkManagerTestInitHelper#closeWorkDatabase()
to avoid Closeguard's warning about leaked resources. ( Ia8d49 ) -
WorkInfo
's constructor is public now, which can be useful in testing. ( Ia00b6 , b/209145335 ) -
work-runtime-ktx
is now empty,CoroutineWorker
and other Kotlin specific utilities are now available in the main work-runtime artifact. ( I71a9a ) - Added
setNextScheduleTimeOverride
method, which allows accurate setting of periodic work schedules ( I3b4da ) - Added
getNextScheduleTimeMillis
to get scheduled run time info is added toWorkInfo
. ( I797e4 ) - Initial delay and periodicity info are added to
WorkInfo
. ( I52f2f ) - Added method observe workers via Flows via methods
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
( If122a ) - Added missing
@RequiresApi(...)
annotations toConstraints
' constructors and properties. They are now aligned with corresponding annotations on setters inConstraints.Builder
that existed from early versions ofWorkManager
. ( I6d7d2 ) -
WorkManager
now has a separate limit for content uri workers to give them guaranteed slots inJobScheduler
to prevent missing content updates under the high load. The limit can be configured viaConfiguration.Builder.setContentUriTriggerWorkersLimit
. ( Ic128f ) - Constraints are added to
WorkInfo
. ( I162c0 )
Version 2.9.0-rc01
18 октября 2023 г.
androidx.work:work-*:2.9.0-rc01
is released. Version 2.9.0-rc01 contains these commits.
- No changes since the last beta release
Version 2.9.0-beta01
6 сентября 2023 г.
androidx.work:work-*:2.9.0-beta01
is released. Version 2.9.0-beta01 contains these commits.
Изменения API
- Added constants for stop reasons returned by
WorkInfo.stopReason
andListenableWorker.stopReason
( I0cc00 )
Version 2.9.0-alpha02
26 июля 2023 г.
androidx.work:work-*:2.9.0-alpha02
is released. Version 2.9.0-alpha02 contains these commits.
Новые возможности
- Now
WorkManager
provides a hint on why a worker was previously stopped. It can be queried from a worker itself viagetStopReason()
method or fromWorkInfo
viagetStopReason()
.
Изменения API
-
stopReason
was added toWorkInfo
. It makes availablestopReason
after the worker ran. It could be helpful in the reportingstopReason
in usable way, because once a worker has been stopped, an app itself could be very quickly killed. ( I21386 ) - Allow Clock to be set via config and used to drive execution sequencing of Worker tests. ( Ic586e )
-
getStopReason()
method was added toListenableWorker
that gives a hint why the worker was stopped. ( I07060 ) - Added
WorkManagerTestInitHelper#closeWorkDatabase()
to avoid Closeguard's warning about leaked resources. ( Ia8d49 )
Исправления ошибок
- Added ability to bypass
overrideNextScheduleTime
usingTestDriver
and fixed issues with testability. ( Ic2905 )
Version 2.9.0-alpha01
7 июня 2023 г.
androidx.work:work-*:2.9.0-alpha01
is released. Version 2.9.0-alpha01 contains these commits.
Новые возможности
- Observability via
Flow
-s. Instead ofLiveData
, Worker's progress now can be observed via Flow's viaWorkManager.getWorkInfosFlow
and similar methods. - Precise scheduling of periodic workers via
setNextScheduleTimeOverride
. This allows dynamic calculation of the next Periodic work schedule, which can be used to implement advanced features like adaptive refresh times, custom retry behavior, or making a newsfeed worker run before the user wakes up every morning without drift.ExistingPeriodicWorkPolicy.UPDATE
should be used with these techniques to avoid cancelling a currently-running worker while scheduling the next one. -
WorkManager
's testing with threading matching production.ExecutorsMode.PRESERVE_EXECUTORS
can be used to preserve executors set inConfiguration
and to use the real main thread. - Coroutines APIs such as
CoroutineWorker
have been moved from additional artifactwork-runtime-ktx
to the main artifactwork-runtime
.work-runtime-ktx
is now empty.
Изменения API
-
WorkInfo
's constructor is public now, that can be useful in testing. ( Ia00b6 , b/209145335 ) -
work-runtime-ktx
is now empty,CoroutineWorker
and other kotlin specific utilities are now available in the mainwork-runtime
artifact. ( I71a9a ) - Added
setNextScheduleTimeOverride
method, which allows accurate setting of periodic work schedules ( I3b4da ) - Renamed
getEarliestRunTimeMillis
togetNextScheduleTimeMillis
. ( I2bd7a ) - Next scheduled run time info is added to
WorkInfo
. ( I797e4 ) - Initial delay and periodicity info are added to
WorkInfo
. ( I52f2f ) - Added method observe workers via Flows via methods
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
( If122a ) - Added missing
@RequiresApi(...)
annotations to Constraints' constructors and properties. They are now aligned with corresponding annotations on setters inConstraints.Builder
that existed from early versions ofWorkManager
. ( I6d7d2 ) -
WorkManager
now has a separate limit for content uri workers to give them guaranteed slots inJobScheduler
to prevent missing content updates under the high load. Limit can be configured viaConfiguration.Builder.setContentUriTriggerWorkersLimit
. ( Ic128f ) - Constraints are added to
WorkInfo
. ( I162c0 )
Version 2.8
Version 2.8.1
22 марта 2023 г.
androidx.work:work-*:2.8.1
is released. Version 2.8.1 contains these commits.
Исправления ошибок
- Fixed ANR in
RescheduleReceiver
that previously didn't correctly handle two simultaneous broadcasts. ( b/236906724 )
Version 2.8.0
February 8, 2023
androidx.work:work-*:2.8.0
is released. Version 2.8.0 contains these commits.
Important changes since 2.7.0
Новые возможности
- An ability to update
WorkRequests
in a non-intrusive way was added, preserving original enqueue time, chaining etc. See detailed blogpost about this feature, as well as javadocs forWorkManager.updateWork
andExistingPeriodicWorkPolicy.UPDATE
for more details.
Изменения API
-
WorkManager.updateWork
was added to update work preserving its original enqueue time and chaining.( I9a248 , b/219446409 ) -
ExistingPeriodicWorkPolicy.UPDATE
was added. This policy allows updating a periodic work by the name. It is similar to the existingREPLACE
, but it is less intrusive: it doesn't cancel a worker if it is currently running and it preserves enqueue time - initial delay and period are calculated from original enqueue time, rather than update time.REPLACE
was deprecated to decrease a confusion between the very similarly namedREPLACE
andUPDATE
. If you still want to keep the previous semantics ofREPLACE
, the newly addedCANCEL_AND_REENQUEUE
, which is identical toREPLACE
, can be used. ( I985ed , b/219446409 ) - Added the ability to intercept scheduling exceptions providing
Consumer<Throwable>
via setSchedulingExceptionHandler ) - Added the ability to provide
Consumer<Throwable>
via setInitializationExceptionHandler to determine if there were issues when trying to initialize WorkManager. - Inline helpers for
OneTimeWorkRequest
&PeriodicWorkRequest
were moved fromandroidx.work:work-runtime-ktx
toandroidx.work:work-runtime
( I0010f , b/209145335 ) - Helper methods
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
were added to createWorkQuery
directly. ( b/199919736 ) ( If48f2 , b/199919736 ) - Added
getForegroundInfo
toWorker
. ( Ic1ead ) -
RxWorker
both for RxJava 2 and RxJava 3 now hassetForeground
returningCompletable
that can be used instead ofsetForegroundInfoAsync
that returnsListenableFuture
-
RxWorker
both for RxJava 2 and RxJava 3 hasgetForegroundInfo
returningSingle
that can be used instead ofgetForegroundInfoAsync
that returnsListenableFuture
. ( b/203851459 ) - Constraints can now be directly constructed rather than using
Constraints.Builder
, which is convenient for Kotlin users. ( Idc390 , b/137568653 ) - Added the ability to check if
WorkManager
has been initialized. Also, added a newgetConfiguration()
API for library developers to get the configuration thatWorkManager
was initialized with. ( I6eff3 , b/212300336 )
Исправления ошибок
- Fixed an issue with the greedy scheduler that would prevent workers from running immediately when under load. ( I9686b , b/248111307 )
- Добавлен
@RequiresPermission
для API, требующих предоставления разрешенияPOST_NOTIFICATIONS
в SDK 33 и более поздних версиях. ( Ie542e , б/238790278 ) - Propagate cancellations in the
CoroutineScope
to theListenableFuture
when usingsuspendCancellableCoroutine
.
Version 2.8.0-rc01
7 декабря 2022 г.
androidx.work:work-*:2.8.0-rc01
is released. Version 2.8.0-rc01 contains these commits.
Новые возможности
- No new features on this release. This is mainly a version bump
Version 2.8.0-beta02
9 ноября 2022 г.
androidx.work:work-*:2.8.0-beta02
is released. Version 2.8.0-beta02 contains these commits.
Исправления ошибок
- Fixed
equals
method inWorkInfo
, that previously didn't take into account new generation information. ( 4977cc )
Version 2.8.0-beta01
5 октября 2022 г.
androidx.work:work-*:2.8.0-beta01
is released. Version 2.8.0-beta01 contains these commits.
Исправления ошибок
- Fixed an issue with the greedy scheduler that would prevent workers from running immediately when under load. ( I9686b , b/248111307 )
Version 2.8.0-alpha04
7 сентября 2022 г.
androidx.work:work-*:2.8.0-alpha04
is released. Version 2.8.0-alpha04 contains these commits.
Изменения API
-
WorkerInfo.getGeneration()
andWorkerParameters.getGeneration()
were added that return the generation of a worker. A worker has multiple generations, if it was updated viaWorkManager.updateWork
orWorkManager.enqueueUniquePeriodicWork
usingExistingPeriodicWorkPolicy.UPDATE
. Note that If the worker is currently running, it is possible for this method to return a newer generation from that of the currently running worker if an update has happened during an execution of the worker. ( I665c5 , b/219446409 ) ( I128a9 , b/219446409 ) - Added
InitializationExceptionHandler
, an Exception Handler that can be used to determine if there were issues when trying to initializeWorkManager
. ( I061de )
Version 2.8.0-alpha03
10 августа 2022 г.
androidx.work:work-*:2.8.0-alpha03
is released. Version 2.8.0-alpha03 contains these commits.
Новые возможности
- An ability to update
WorkRequests
in a non-intrusive way was added, preserving original enqueue time, chaining etc. SeeWorkManager.updateWork
andExistingPeriodicWorkPolicy.UPDATE
for more details.
Изменения API
-
WorkManager.updateWork
was added to update work preserving its original enqueue time and chaining.( I9a248 , b/219446409 ) -
ExistingPeriodicWorkPolicy.UPDATE
was added. This policy allows to update a periodic work by the name. It is similar to the existingREPLACE
, but it is less intrusive: it doesn't cancel a worker if it is currently running and it preserves enqueue time - initial delay and period are calculated from original enqueue time, rather than update time.REPLACE
was deprecated to decrease a confusion between very similarly namedREPLACE
andUPDATE
. If you still want to keep the previous semantics ofREPLACE
, the newly addedCANCEL_AND_REENQUEUE
, which is identical toREPLACE
, can be used. ( I985ed , b/219446409 ) - Add the ability to intercept scheduling exceptions by defining a
SchedulingExceptionHandler
. ( I033eb ) - Inline helpers for
OneTimeWorkRequest
&PeriodicWorkRequest
were moved fromandroidx.work:work-runtime-ktx
toandroidx.work:work-runtime
( I0010f , b/209145335 )
Исправления ошибок
- Добавлен
@RequiresPermission
для API, требующих предоставления разрешения POST_NOTIFICATIONS в SDK 33 и более поздних версиях. ( Ie542e , б/238790278 )
Version 2.8.0-alpha02
6 апреля 2022 г.
androidx.work:work-*:2.8.0-alpha02
is released. Version 2.8.0-alpha02 contains these commits.
Изменения API
- Constraints can now be directly constructed rather than using Builder, which is convenient for Kotlin users. ( Idc390 , b/137568653 )
- Added the ability to check if
WorkManager
has been initialized. Also, added a newgetConfiguration()
API for library developers to get the configuration thatWorkManager
was initialized with. ( I6eff3 , b/212300336 )
Version 2.8.0-alpha01
12 января 2022 г.
androidx.work:work-*:2.8.0-alpha01
is released. Version 2.8.0-alpha01 contains these commits.
Изменения API
- Helper methods
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
were added to create WorkQuery directly. ( If48f2 , b/199919736 ) - Добавляет экспериментальные методы BuildCompat для будущих SDK ( IAFD82 , B/207528937 )
- Add
getForegroundInfo
toWorker
. ( Ic1ead ) - Helper methods
WorkQuery.fromIds
to create WorkQuery directly from ids were added. ( Ie5bdf , b/199919736 ) - RxWorker now has
setForeground
returningCompletable
that can be used instead ofsetForegroundInfoAsync
that returnsListenableFuture
. ( I85156 ) - RxWorker for RxJava 2 now has
getForegroundInfo
returningSingle
that can be used instead ofgetForegroundInfoAsync
that returnsListenableFuture
. ( I21c91 , b/203851459 ) - RxWorker for RxJava 3 now has
getForegroundInfo
returningSingle
that can be used instead ofgetForegroundInfoAsync
that returnsListenableFuture
. ( I1ca8a ) - RxWorker now has
setForeground
returningCompletable
that can be used instead ofsetForegroundInfoAsync
that returnsListenableFuture
. ( I992a3 , b/203851459 )
Исправления ошибок
- Propagate cancellations in the
CoroutineScope
to theListenableFuture
when usingsuspendCancellableCoroutine
. ( I77e63 )
Версия 2.7
Version 2.7.1
17 ноября 2021 г.
androidx.work:work-*:2.7.1
is released. Version 2.7.1 contains these commits.
Исправления ошибок
- Cancellations in the
CoroutineScope
are propagated to theListenableFuture
when usingsuspendCancellableCoroutine
. ( I77e63 ) - An exception is thrown immediately when delayed work requests are marked as expedited. bef1762
Version 2.7.0
13 октября 2021 г.
androidx.work:work-*:2.7.0
is released. Version 2.7.0 contains these commits.
Important changes since 2.6.0
WorkManager introduces a new
WorkRequest.Builder.setExpedited(...)
API to help with Foreground Service restrictions in Android 12.When using
setExpedited(...)
, WorkManager delegates to expedited jobs in JobScheduler starting Android 12, while providing backwards compatibility on prior versions of Android by delegating to a Foreground Service.
Version 2.7.0-rc01
29 сентября 2021 г.
androidx.work:work-*:2.7.0-rc01
is released. Version 2.7.0-rc01 contains these commits.
This version is identical to androidx.work:work-*:2.7.0-beta01
.
Version 2.7.0-beta01
1 сентября 2021 года
androidx.work:work-*:2.7.0-beta01
is released. Version 2.7.0-beta01 contains these commits.
Новые возможности
- Reduce multi-process SQLite contention when initializing WorkManager.
Изменения API
- Remove
@ExperimentalExpeditedWork
APIs given the underlying platform APIs for Android 12 (S) are stable. ( aosp/1792806 )
Исправления ошибок
- Provide a better error message for expedited workers that do not implement
getForegroundInfoAsync()
. ( aosp/1809376 )
Версия 2.7.0-альфа05
21 июля 2021 года
androidx.work:work-*:2.7.0-alpha05
is released. Version 2.7.0-alpha05 contains these commits.
This release also contains bug fixes from the WorkManager 2.6.0-beta02
release.
Версия 2.7.0-альфа04
2 июня 2021 года
androidx.work:work-*:2.7.0-alpha04
is released.
This release also contains the changes from the 2.6.0-beta01 release.
Изменения API
-
ListenableWorker.setForegroundAsync()
is no longer deprecated. - We recommend using
WorkRequest.Builder.setExpedited(...)
API when possible. To better support situations when the app is not subject to foreground service restrictions , developers can use theListenableWorker.setForegroundAsync()
API. - If
ListenableWorker.setForegroundAsync()
is called, when the app is subject to foreground service restrictions, this will throw the ForegroundServiceStartNotAllowedException .
Исправления ошибок
- When expedited jobs are rescheduled, they are no longer expedited. They become regular jobs.
Версия 2.7.0-альфа03
21 апреля 2021 года
androidx.work:work-*:2.7.0-alpha03
is released. Version 2.7.0-alpha03 contains these commits.
Новые возможности
From WorkManager
2.6.0-alpha02
: Adds support for Workers that can run in any process. ( Iaf200 )From WorkManager
2.6.0-alpha02
: Added aRemoteCoroutineWorker
which is an implementation ofRemoteListenableWorker
that can bind to a remote process. ( I30578 )
Изменения API
- From WorkManager
2.6.0-alpha02
:Added support forTEMPORARILY_UNMETERED
network constraint. ( I08d5e ) - From WorkManager
2.6.0-alpha02
:Multi-process worker support forsetProgressAsync()
. ( Ib6d08 ) - From WorkManager
2.6.0-alpha02
:MakeWorkManagerInitializer
public so otherandroidx.startup.Initializer
s can use these as dependencies. ( I5ab11 )
Версия 2.7.0-альфа02
10 марта 2021 года
androidx.work:work-*:2.7.0-alpha02
is released. Version 2.7.0-alpha02 contains these commits.
Исправления ошибок
- Make
PendingIntent
mutability explicit, to fix a crash when targeting Android 12. ( b/180884673 )
Версия 2.7.0-альфа01
18 февраля 2021 года
androidx.work:work-*:2.7.0-alpha01
is released. Version 2.7.0-alpha01 contains these commits.
Новые возможности
WorkManager introduces a new
WorkRequest.Builder.setExpedited(...)
API to take into account the foreground Service restrictions in Android 12.Applications can no longer launch a foreground service when they are in the background. Therefore, to better support long running work which was previously bound to the lifecycle of a foreground service, applications can mark
WorkRequest
s as expedited .This API is a replacement for the
setForegroundAsync(...)
/setForeground(...)
APIs which are now deprecated .When using
setExpedited(...)
, WorkManager delegates to expedited jobs inJobScheduler
starting Android 12, while providing backwards compatibility on prior versions of Android by delegating to foreground services,
Изменения API
- Add support for expedited
WorkRequest
s.
Версия 2.6.0
Версия 2.6.0
1 сентября 2021 года
androidx.work:work-*:2.6.0
is released. Версия 2.6.0 содержит эти коммиты.
Важные изменения с версии 2.5.0
WorkManager now uses
androidx.startup
to initialize WorkManager. If you usedtools:node="remove"
theContentProvider
being used to initialize WorkManager in the past, then you need to do the following instead.<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" />
Added support for Workers that can run in any process. ( Iaf200 )
Added a
RemoteCoroutineWorker
which is an implementation of RemoteListenableWorker that can bind to a remote process. ( I30578 )
Версия 2.6.0-rc01
4 августа 2021 года
androidx.work:work-*:2.6.0-rc01
is released. Версия 2.6.0-rc01 содержит эти коммиты.
This version is identical to androidx.work:work-*:2.6.0-beta02
.
Version 2.6.0-beta02
21 июля 2021 года
androidx.work:work-*:2.6.0-beta02
is released. Version 2.6.0-beta02 contains these commits.
Исправления ошибок
-
RemoteWorkManager
now correctly unbinds fromRemoteWorkManagerService
which allowsRemoteWorkManagerService
to clean up correctly. aosp/1730694 -
RemoteListenableWorker
now correctly unbinds fromRemoteWorkerService
which allowsRemoteWorkerService
to clean up correctly. aosp/1743817 -
ForceStopRunnable
now only runs in the primary app process. This is an optimization, and avoids resource contention for apps that use multiple processes. aosp/1749180 , aosp/1761729
Версия 2.6.0-бета01
2 июня 2021 года
androidx.work:work-*:2.6.0-beta01
is released. Версия 2.6.0-beta01 содержит эти коммиты.
This release contains some minor documentation improvements. The release is largely identical to 2.6.0-alpha02 .
Версия 2.6.0-альфа02
21 апреля 2021 года
androidx.work:work-*:2.6.0-alpha02
is released. Версия 2.6.0-alpha02 содержит эти коммиты.
Новые возможности
Adds support for Workers that can run in any process. ( Iaf200 )
Added a
RemoteCoroutineWorker
which is an implementation ofRemoteListenableWorker
that can bind to a remote process. ( I30578 )
Изменения API
- Added support for
TEMPORARILY_UNMETERED
network constraint. ( I08d5e ) - Multi-process worker support for
setProgressAsync()
. ( Ib6d08 ) - Make
WorkManagerInitializer
public so otherandroidx.startup.Initializer
s can use these as dependencies. ( I5ab11 )
Версия 2.6.0-альфа01
24 марта 2021 года
androidx.work:work-*:2.6.0-alpha01
is released. Версия 2.6.0-alpha01 содержит эти коммиты.
Новые возможности
WorkManager
now usesandroidx.startup
to initialize WorkManager. Previously, this was being done byandroidx.work.impl.WorkManagerInitializer
. ( aosp/1608813 )If you used
tools:node="remove"
theContentProvider
being used to initialize process lifecycle in the past, then you need to do the following instead.<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
- Add a
Result.getOutputData()
API which returns the ListenableWorker'soutputData
. ( Ie51e3 )
Исправления ошибок
- Add a workaround for an OEM bug which causes a
SecurityException
to be thrown when usingAlarmManager
APIs. ( aosp/1587518 )
Версия 2.5.0
Версия 2.5.0
27 января 2021 года
androidx.work:work-*:2.5.0
is released. Версия 2.5.0 содержит эти коммиты.
Major changes since 2.4.0
- A new
:work:work-multiprocess
artifact for apps that use multiple processes. This introduces performance gains by unifying work request scheduling to a single process.- To use
work-multiprocess
, define a dependency on:implementation "androidx.work:work-multiprocess:2.5.0"
- Designate a primary process using Configuration.Builder.setDefaultProcessName(String) .
- When using
work-multiprocess
you also want to use RemoteWorkManager to manage yourWorkRequest
s. RemoteWorkManager always reaches out to the designated process. The in-process scheduler also runs in the designated process.
- To use
- Sometimes,
ActivityManager
cannot instantiate theJobService
instance, to start a job. This causes the underlying job to get silently dropped because of a platform bug.WorkManager
now ensures that there are backing jobs for every singleWorkRequest
when anApplication
is being initialized by reconciling jobs. This greatly improves job execution reliability. ( b/172475041 , aosp/1489577 ) -
WorkManager
limits database growth by reducing the buffer duration thatWorkRequest
s are tracked after aWorkRequest
is complete. The duration was7
days previously. It has been reduced to1
day + the keepResultsForAtLeast duration. ( aosp/1419708 ) - The
TestListenableWorkerBuilder
now supports the reified class extendingListenableWorker
to make testing easier. ( aosp/1443299 , b/169787349 ) - WorkManager inspector is now available when using Android Studio Arctic Fox.
Версия 2.5.0-rc01
13 января 2021 года
androidx.work:work-*:2.5.0-rc01
is released. Версия 2.5.0-rc01 содержит эти коммиты.
Исправления ошибок
- Fixed a bug where
getWorkInfosLiveData
was not correctly getting invalidated after entities were updated when using theWorkQuery
based API. ( aosp/1540566 , b/173769028 ) - Fixed a bug where database transactions were not being marked as successful in some rare cases. This causes issues on some Motorola devices. ( aosp/1535368 , b/175944460 )
- Fixed a bug to ignore
NoSuchElementException
s when trying to unbind from a dead process. ( aosp/1530589 ) - Improve
ConstraintTrackingWorker
to only stop aListenableWorker
if it's not already been stopped. ( aosp/1496844 , b/172946965 ) - Update androidx.work libraries to target Java 8 ( Ibd2f2 )
Версия 2.5.0-бета02
December 2, 2020
androidx.work:work-*:2.5.0-beta02
is released. Версия 2.5.0-beta02 содержит эти коммиты.
Исправления ошибок
- Fixed a bug in
androidx.work:work-multiprocess
where WorkManager inadvertently blocked the calling thread when trying to bind to the designated process. ( aosp/1475538 ) - Fixed a bug where
PeriodicWorkRequest
s were not being reconciled correctly. ( b/172475041 , aosp/1489577 ) - Added a workaround for a platform bug when stopping the foreground service when using the
setForeground*
APIs. ( b/170924044 , aosp/1489901 )
Версия 2.5.0-бета01
October 28, 2020
androidx.work:work-*:2.5.0-beta01
is released. Версия 2.5.0-beta01 содержит эти коммиты.
Новые возможности
-
WorkManager
automatically throttles the number ofWorkRequest
s that can be picked up by the in-process scheduler. The requests are still executed in FIFO order. ( aosp/1455228 ) -
WorkManager
attempts to recover when the application's datastore is in a bad state. ( aosp/1463103 )
Исправления ошибок
- When
ListenableWorker
s are interrupted, mark themENQUEUED
immediately so they can be subsequently rescheduled. ( aosp/1455618 , b/170273988 )
Версия 2.5.0-альфа03
14 октября 2020 года
androidx.work:work-*:2.5.0-alpha03
is released. Версия 2.5.0-alpha03 содержит эти коммиты.
Изменения API
-
TestListenableWorkerBuilder
andTestWorkerBuilder
do not use raw types. ( I883ad , b/169787349 )
Исправления ошибок
- Use
ApplicationInfo
to determine the name of the default app process. ( b/168716641 , aosp/1429950 ) - Fix the visibility rules for
RemoteWorkManager
andRemoteWorkContinuation
. These APIs are no-longer marked as@Restricted
. ( aosp/1432091 ) - Fix proguard rules for
:work:work-multiprocess
. ( aosp/1432091 ) - Improve notification lifecycles for long running work bound to a foreground service. ( b/168502234 , aosp/1431331 )
Версия 2.5.0-альфа02
September 16, 2020
androidx.work:work-*:2.5.0-alpha02
is released. Версия 2.5.0-alpha02 содержит эти коммиты.
Новые возможности
- Add an API to WorkQuery to be able to use
id
s to queryWorkInfo
s. ( aosp/1412372 , b/157335295 ) - WorkManager better supports apps that use multiple processes with a new artifact (
androidx.work:work-multiprocess:*
). This new artifact helps solve a few problems that large apps encounter including:- WorkManager typically needs to be initialized in every app process. This is not great because there is increased SQLite contention which in turn causes other problems. WorkManager now has new APIs which can be used to designate a primary app process using
Configuration#setDefaultProcessName(processName)
. TheprocessName
is a fully qualified process name which looks likepackageName:processName
(egcom.example:remote
). - A set of new APIs:
RemoteWorkManager
andRemoteWorkContinuation
toenqueue
,cancel
andquery
work requests. These APIs do not includeLiveData
variants to avoid SQLite contention across multiple-processes. All calls toenqueue
,cancel
andquery
are forwarded to aprimary
app process using AIDL and return a fluentListenableFuture
. ( aosp/1392657 , aosp/1411210 , aosp/1412215 , aosp/1417713 )
- WorkManager typically needs to be initialized in every app process. This is not great because there is increased SQLite contention which in turn causes other problems. WorkManager now has new APIs which can be used to designate a primary app process using
Изменения API
- WorkManager now prunes completed
WorkRequest
s that have no incomplete dependencies more aggressively. The buffer duration changed from7
days to1
day. ( aosp/1419708 )
Исправления ошибок
- WorkManager now reconciles jobs proactively so
WorkRequest
s andJobScheduler
jobs are in sync whenWorkManager
is initialized. ( aosp/1412794 , b/166292069 )
Версия 2.5.0-альфа01
August 19, 2020
androidx.work:work-*:2.5.0-alpha01
is released. Версия 2.5.0-alpha01 содержит эти коммиты.
Новые возможности
- Changes to internal APIs that allow us to provide better tooling with
WorkManager
going forward. Stay tuned for additional updates.
Исправления ошибок
- Handle
SecurityException
s when tracking network state on some devices. ( aosp/1396969 )
Внешний вклад
- Fix documentation for
ArrayCreatingInputMerger
by Zac Sweers ( github/43 ).
Версия 2.4.0
Версия 2.4.0
22 июля 2020 года
androidx.work:work-*:2.4.0
is released. Версия 2.4.0 содержит эти коммиты.
Major changes since 2.3.0
-
WorkManager
s in-process scheduler is now more capable. Previously, the in-processScheduler
would only consider executing work that was not delayed and whose constraints were met. Now, the in-process scheduler tracksWorkRequest
s which might be executed in the future, including PeriodicWorkRequests. The in-processScheduler
also does not observe scheduling limits (but is still restricted to the size of theExecutor
being used by WorkManager). This means that the application can now execute a lot more WorkRequests when the app is in the foreground. To manage execution of delayed work in the foreground,WorkManager
also introduces a new configurableRunnableScheduler
. ( aosp/1185778 ) - WorkManager now supports RxJava 3. To use RxJava 3, you should include the following dependency:
implementation "androidx.work:work-rxjava3:2.4.0"
. ( aosp/1277904 ) - Added the ability to query for
WorkInfo
s by using aWorkQuery
. This is useful when developers want to queryWorkInfo
s by a combination of multiple attributes. For more information look atWorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
orWorkQuery.Builder.fromUniqueWorkNames(...)
. ( aosp/1253230 , b/143847546 ) Add the ability to request diagnostic information from
WorkManager
using:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
This provides a lot of useful information including:
- WorkRequests that were completed in the last 24 hours.
- WorkRequests that are currently RUNNING.
- Scheduled WorkRequests. ( aosp/1235501 )
Add
ExistingWorkPolicy.APPEND_OR_REPLACE
which is similar toAPPEND
, but replaces a chain that has cancelled or failed prerequisites. ( b/134613984 , aosp/1199640 )Provide the ability to add a custom
RunnableScheduler
to track WorkRequests that need to be executed in the future. This is used by the in-process Scheduler. ( aosp/1203944 )Add support for dynamically adding factories to delegate to, when using a
DelegatingWorkerFactory
. ( b/156289105 , aosp/1309745 )Align tracking for
BATTERY_NOT_LOW
constraints more closely with the platform. ( aosp/1312583 )The in-process scheduler now uses better APIs to determine the name of the process. This is useful to better support apps that use multiple-processes. ( aosp/1324732 )
New Lint rules which enforce:
- Use of the right
foregroundServiceType
when usingsetForegroundAsync()
APIs. ( b/147873061 , aosp/1215915 ) - Specifying JobScheduler ids that WorkManager should use when using JobService APIs directly. aosp/1223567
- Added a new lint rule that ensures that
ListenableWorker
implementations are nowpublic
when using the defaultWorkerFactory
. ( aosp/1291262 )
- Use of the right
Calls to
setForegroundAsync()
that do not complete before completion of aListenableWorker
will now be signalled via anIllegalStateException
on the returnedListenableFuture
. ( aosp/1262743 )Fix a bug where the
ForegroundService
is not stopped after a foregroundWorker
is interrupted. ( b/155579898 , aosp/1302153 )Fix a bug where
WorkManager
attempts to execute multiple instances of aWorker
bound to a Foreground Service ( b/156310133 , aosp/1309853 )
Версия 2.4.0-rc01
June 24, 2020
androidx.work:work-*:2.4.0-rc01
is released. Версия 2.4.0-rc01 содержит эти коммиты.
Исправления ошибок
- The in-process scheduler now uses better APIs to determine the name of the process. This is useful to better support apps that use multiple-processes. ( aosp/1324732 )
Версия 2.4.0-бета01
May 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
, and androidx.work:work-testing:2.4.0-beta01
are released. Версия 2.4.0-beta01 содержит эти коммиты.
Исправления ошибок
- Fix a bug where the
ForegroundService
is not stopped after a foregroundWorker
is interrupted. ( b/155579898 , aosp/1302153 ) - Fix a bug where
WorkManager
attempts to execute multiple instances of aWorker
bound to a Foreground Service ( b/156310133 , aosp/1309853 ) - Add support for dynamically adding factories to delegate to, when using a
DelegatingWorkerFactory
. ( b/156289105 , aosp/1309745 ) - Align tracking for
BATTERY_NOT_LOW
constraints more closely with the platform. ( aosp/1312583 )
Версия 2.4.0-Alpha03
April 29, 2020
androidx.work:work-*:2.4.0-alpha03
is released. Версия 2.4.0-Alpha03 содержит эти коммиты.
Новые возможности
- WorkManager now supports RxJava 3. To use RxJava 3, you should include the following dependency:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
. ( aosp/1277904 ) - Added a new lint rule that ensures that
ListenableWorker
implementations are nowpublic
when using the defaultWorkerFactory
. ( aosp/1291262 )
Изменения API
- Calling
setProgressAsync()
after aListenableWorker
has finished execution will now signal anException
via theListenableFuture
. ( aosp/1285494 ) -
WorkQuery.Builder
is now markedfinal
. ( aosp/1275037 ) -
WorkQuery.Builder
factory methodswithStates
,withTags
andwithUniqueWorkNames
have been renamed tofromStates
,fromTags
andfromUniqueWorkNames
respectively. ( aosp/1280287 )
Исправления ошибок
- Ignore
SecurityException
s when tracking network state of a device. ( b/153246136 , aosp/1280813 )
Версия 2.4.0-Alpha02
April 1, 2020
androidx.work:work-*:2.4.0-alpha02
is released. Версия 2.4.0-Alpha02 содержит эти коммиты.
Новые возможности
- Added a new Lint rule that warns when
WorkRequest
s requires bothConstraints.setRequiresCharging(...)
andConstraints.setRequiresDeviceIdle(...)
. Some devices are never charging and idle at the same time. So such requests would run less frequently than expected. ( aosp/1253840 )
Изменения API
Added the ability to query for
WorkInfo
s by using aWorkQuery
. This is useful when developers want to queryWorkInfo
s by a combination of multiple attributes. For more information look atWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
orWorkQuery.Builder withUniqueWorkNames(...)
. ( aosp/1253230 , b/143847546 )Calls to
setForegroundAsync()
that do not complete before completion of aListenableWorker
will now be signalled via anIllegalStateException
on the returnedListenableFuture
. ( aosp/1262743 )
Исправления ошибок
- Fixed the lint rule that checks for invalid interval durations for
PeriodicWorkRequest
s. ( aosp/1254846 , b/152606442 )
Версия 2.4.0-Alpha01
March 4, 2020
androidx.work:work-*:2.4.0-alpha01
is released. Версия 2.4.0-Alpha01 содержит эти коммиты.
Новые возможности
WorkManager
s in-process scheduler is now more capable. Previously, the in-process Scheduler would only consider executing work that was not delayed and whose constraints were met. Now, the in-process scheduler tracksWorkRequest
s which might be executed in the future, includingPeriodicWorkRequest
s. The in-process Scheduler also does not observe scheduling limits (but is still restricted to the size of theExecutor
being used by WorkManager). This means that the application can now execute a lot moreWorkRequest
s when the app is in the foreground. ( aosp/1185778 )Added the ability to request diagnostic information from WorkManager using
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. This provides a lot of useful information including:- WorkRequests that were completed in the last 24 hours.
- WorkRequests that are currently RUNNING.
- Scheduled WorkRequests. ( aosp/1235501 )
New Lint rules which enforce:
- Use of the right
foregroundServiceType
when usingsetForegroundAsync()
APIs. ( b/147873061 , aosp/1215915 ) - Specifying
JobScheduler
ids thatWorkManager
should use when usingJobService
APIs directly. ( aosp/1223567 )
- Use of the right
Изменения API
Add
ExistingWorkPolicy.APPEND_OR_REPLACE
which is similar toAPPEND
, but replaces a chain that has cancelled or failed prerequisites. ( b/134613984 , aosp/1199640 )Provide the ability to add a custom
RunnableScheduler
to trackWorkRequest
s that need to be executed in the future. This is used by the in-process Scheduler. ( aosp/1203944 )
Исправления ошибок
- Deprecated
setProgress()
inRxWorker
because it previously returned aSingle<Void>
which is an impossible type. Added a new APIsetCompletableProgress()
which returns aCompletable
instead; and added new Lint rules which help migrate to the new APIs. ( b/150080946 , aosp/1242665 )
Version 2.3.4
Version 2.3.4
18 марта 2020 года
androidx.work:work-*:2.3.4
is released. Version 2.3.4 contains these commits.
Исправления ошибок
- Fixed a bug which would cause multiple instances of a long running
Worker
s to run, after exceeding the 10 minute execution window. ( aosp/1247484 , b/150553353 ) - Fix for WorkManager's lint
IssueRegistry
. Thank you @ZacSweers from Slack, for the contribution. ( aosp/1217923 )
Version 2.3.3
Version 2.3.3
March 4, 2020
androidx.work:work-*:2.3.3
is released. Version 2.3.3 contains these commits.
Исправления ошибок
- Fixed a bug where if a
Worker
was interrupted, it would not get rescheduled correctly. ( b/150325687 , aosp/1246571 )
Version 2.3.2
Version 2.3.2
19 февраля 2020 года
androidx.work:work-*:2.3.2
are released. Version 2.3.2 contains these commits.
Исправления ошибок
- Fixes an issue where WorkManager exceeds the 100 job limit in JobScheduler in rare cases. ( aosp/1226859 , b/149092520 )
- Fix for a race condition in ConstraintControllers. ( aosp/1220100 )
- Improved the management foreground Service lifecycle for long running Workers. ( aosp/1226295 )
- Improved the management of cancellation of Notifications for long running Workers upon Worker cancellation. ( aosp/1228346 )
Version 2.3.1
Version 2.3.1
February 5, 2020
androidx.work:work-*:2.3.1
is released. Version 2.3.1 contains these commits .
Исправления ошибок
- Better manage the lifecycle of
Notification
s for long runningWorker
s that run when a foregroundService
is active. ( aosp/1218539 , b/147249312 ) -
WorkManager
now depends onandroidx.sqlite:sqlite-framework:2.1.0
stable. ( aosp/1217729 ) - Added lint rules to ensure that a
foregroundServiceType
is specified in theAndroidManifest.xml
when usingforegroundServiceType
s inForegroundInfo
. ( aosp/1214207 , b/147873061 )
Версия 2.3.0
Версия 2.3.0
January 22, 2020
androidx.work:work-*:2.3.0
is released with no changes since 2.3.0-rc01
. Version 2.3.0 contains these commits .
Важные изменения с 2.2.0
- Support for long running or important work via
ListenableWorker#setForegroundAsync()
. - Support for Worker Progress via
ListenableWorker#setProgressAsync()
. - WorkManager now packages additional lint rules as part of the library which helps catch bugs early.
Версия 2.3.0-RC01
January 8, 2020
androidx.work:work-*:2.3.0-rc01
is released. Version 2.3.0-rc01 contains these commits .
This release is identical to 2.3.0-beta02
Исправления ошибок
- The
work-testing
artifact now defines anapi
dependency onwork-runtime-ktx
. ( aosp/1194410 )
Версия 2.3.0-бета02
18 декабря 2019 г.
androidx.work:work-*:2.3.0-beta02
is released. Version 2.3.0-beta02 contains these commits .
Новые возможности
- Added a better error message for non-recoverable SQLite exceptions. ( aosp/1185777 )
- Added a lint rule which ensures that the content provider
androidx.work.impl.WorkManagerInitializer
is removed from theAndroidManifest.xml
when using on demand initialization. ( aosp/1167007 ) - Added a lint warning when
enqueue()
is used for aPeriodicWorkRequest
instead ofenqueueUniquePeriodicWork()
. ( aosp/1166032 )
API changes
-
ForegroundInfo
now requires you to specify thenotificationId
to be used when usingListenableWorker.setForegroundAsync()
. This is a breaking change. This allows you to run multiple long runningWorker
s in parallel.WorkManager
also better manages lifetimes of the providedNotification
s. ( b/145473554 , aosp/1181208 , asop/1181216 , asop/1183577 )
Исправления ошибок
- Fixed a bug in the AlarmManager implementation where alarms were not being cleaned up correctly. ( aosp/1156444 )
- Fixed a bug where an empty list of
WorkRequest
s would cause an incorrectWorkContinuation
chain to be built. ( b/142835274 , aosp/1157051 )
Dependency changes
- WorkManager now uses Room 2.2.2.
Версия 2.3.0-бета01
20 ноября 2019 года
androidx.work:work-*:2.3.0-beta01
is released. Version 2.3.0-beta01 contains these commits .
Новые возможности
- Added a new lint rule which prevents developer errors due to incorrect implementation of
androidx.work.Configuration.Provider
when using on-demand initialization. aosp/1164559
Версия 2.3.0-Alpha03
23 октября 2019 года
androidx.work:work-*:2.3.0-alpha03
is released. Version 2.3.0-alpha03 contains these commits .
Новые возможности
- Added
WorkManager.createCancelPendingIntent()
API which makes it easy to cancelWorkRequest
s without having to register another component in theAndroidManifest.xml
. This API makes it especially easy to cancelWorkRequest
s fromNotification
s. We expect this to be paired with the new foreground APIs in 2.3.0. - WorkManager now depends on
androidx.room:*:2.2.0
stable.
API changes
- Renamed
ForegroundInfo.getNotificationType()
toForegroundInfo.getForegroundServiceType()
to be more consistent with the underlying platform APIs. ( b/142729893 , aosp/1143316 )
Исправления ошибок
- Fixed a bug which is caused by an unnecessary call to
setTransactionSuccessful()
outside of a transaction. This happens for rare migrations. ( b/142580433 , aosp/1141737 )
Версия 2.3.0-Alpha02
9 октября 2019 года
androidx.work:work-*:2.3.0-alpha02
is released. Version 2.3.0-alpha02 contains these commits .
Новые возможности
- WorkManager now supports running long running or important work that should be kept alive by the OS. For more information look at
ListenableWorker#setForegroundAsync()
(orCoroutineWorker#setForeground()
for Kotlin). ( aosp/1133636 )
API changes
- The
containsKey
API inData
is renamed tohasKeyWithValueOfType
. The corresponding extension method in thektx
library has also been renamed. ( b/141916545 )
Исправления ошибок
- WorkManager schedules work fairly when the number of
WorkRequest
s enqueued approach scheduling limits . ( aosp/1105766 ) - WorkManager calls
ListenableWorker#onStopped()
only if the work is not already completed. ( b/140055777 ) - WorkManager now removes progress information when a worker gets interrupted or reaches its terminal state. ( aosp/1114572 )
-
Data
now has a much more usefultoString()
representation. ( b/140945323 ) -
Data
now has a betterequals()
method. It also supportsdeepEquals
forArray
types. ( b/140922528 ) - WorkManager now stores its internal database and preference files in a no backup directory. ( b/114808216 )
Версия 2.3.0-Alpha01
22 августа 2019 г.
androidx.work:work-*:2.3.September 5, 20190-alpha01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Новые возможности
-
ListenableWorker
s can now set progress via thesetProgressAsync()
API. Also added a correspondingsuspend
-ingsetProgress
API inCoroutineWorker
and asetProgress
inRxWorker
which returns aSingle<Void>
. With these new APIs Workers can convey progress information viaWorkInfo
which has a correspondinggetProgress
API. ( b/79481554 ) -
Data
has acontainsKey()
API which can be used to validate that input data toWorker
s has keys with the expected type. ( b/117136838 ) -
Data
can now be serialized usingData.toByteArray()
andData.fromByteArray()
. Note that there are no versioning guarantees withData
so you should not persist it or use it for IPC between applications. They are only safe to be used between multiple processes of the same application. - Added the ability to specify an
InputMergerFactory
viaConfiguration.setInputMergerFactory
. ( b/133273159 )
API changes
- WorkManager will throw an instance of
IllegalStateException
if aWorkerFactory
returns an instance ofListenableWorker
which has been previously invoked. ( b/139554406 ) - Documentation updates around
ListenableFuture
cancellation and theonStopped()
callback inListenableWorker
. ( b/138413671 )
Исправления ошибок
- The in-process Scheduler now ignores
WorkRequest
s with theidle
constraint. These requests are now only picked up byJobScheduler
when the device is actuallyidle
. ( aosp/1089779 ) -
TestScheduler
now correctly uses the specifiedExecutor
for its internal task executor in tests. ( aosp/1090749 )
Версия 2.2.0
Версия 2.2.0
August 15, 2019
androidx.work:work-*:2.2.0
is released. Коммуты, включенные в эту версию, можно найти здесь .
This release is identical to androidx.work:work-*:2.2.0-rc01
.
Important Changes in 2.2.0 from 2.1.0
androidx.work:work-gcm:2.2.0
is a new Maven artifact which supports the use of GCMNetworkManager as a scheduler when Google Play Services is available for API levels <= 22. This is an optional dependency that helps with more reliable and performant background processing on older API versions. If your app uses Google Play Services, add this dependency to your gradle file to automatically get GCMNetworkManager support. If Play Services is not available, WorkManager will continue to fall back to AlarmManager on older devices.
Версия 2.2.0-RC01
July 30, 2019
androidx.work:work-*:2.2.0-rc01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Fixed a bug in the AlarmManager implementation that causes the Service to shutdown prematurely and resulting in a
RejectedExecutionException
in rare cases. ( aosp/1092374 ) ( b/138238197 ). - Added a workaround for a
NullPointerException
when usingJobScheduler
APIs on some devices. ( aosp/1091020 ) ( b/138364061 ), ( b/138441699 )
Version 2.2.0-beta02
July 19, 2019
androidx.work:work-*:2.2.0-beta02
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Removed unintentional jacoco dependency that was introduced in
2.2.0-beta01
.
Версия 2.2.0-бета01
July 17, 2019
androidx.work:work-*:2.2.0-beta01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Новые возможности
-
androidx.work:work-gcm:2.2.0-beta01
is a new Maven artifact which supports the use of GCMNetworkManager as a scheduler when Google Play Services is available for API levels <= 22. This is an optional dependency that helps with more reliable and performant background processing on older API versions. If your app uses Google Play Services, add this dependency to your gradle file to automatically get GCMNetworkManager support. If Play Services is not available, WorkManager will continue to fall back to AlarmManager on older devices.
Исправления ошибок
- Fix for
IllegalArgumentException
when tracking network state on Nvidia Shield K1 tablets. ( aosp/1010188 )
Версия 2.1.0
Версия 2.1.0
July 11, 2019
androidx.work:work-*:2.1.0
is released. This release is identical to androidx.work:work-*:2.1.0-rc01
.
Important changes since 2.0.1
-
work-runtime-ktx
now requires Java 8. If you run into any issues, you can add the following to yourbuild.gradle
:kotlinOptions { jvmTarget = "1.8" }
- Added on-demand initialization for WorkManager, which will create WorkManager only when referenced. b/127497100 To set up your project for on-demand initialization:
- Disable the automatic initializer .
- Implement
Configuration.Provider
on your customApplication
object. - Change all references of
WorkManager.getInstance()
toWorkManager.getInstance(Context)
. As part of this change, we have deprecatedWorkManager.getInstance()
. It is always safer to call the newWorkManager.getInstance(Context)
replacement, even if you're not doing on-demand initialization.
-
PeriodicWorkRequest
s now support initial delays. You can use thesetInitialDelay
method onPeriodicWorkRequest.Builder
to set an initial delay. b/111404867 - Added the ability to delegate to one or more registered
WorkerFactory
s usingDelegatingWorkerFactory
. b/131435993 - Added the ability to customize the
Executor
used by WorkManager for all its internal book-keeping viaConfiguration.Builder.setTaskExecutor
. - Added the ability to create unit testable
Worker
andListenableWorker
classes by usingTestWorkerBuilder
andTestListenableWorkerBuilder
in thework-testing
artifact.- Note that
work-testing
now pulls in Kotlin as a dependency and includes several Kotlin extensions by default.
- Note that
- Added run attempt count to
WorkInfo
. b/127290461 -
Data
types can now store and retrieve bytes and byte arrays. This does NOT change the maximum size ofData
objects. - WorkManager now depends on
Room 2.1.0
, which should fix some database issues.
Версия 2.1.0-RC01
June 27, 2019
androidx.work:work-*:2.1.0-rc01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Fixed a bug which would cause an application to crash when executing jobs with
JobScheduler
while a backup was in progress b/135858602 .
Version 2.1.0-beta02
June 20, 2019
androidx.work:work-*:2.1.0-beta02
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
-
TestListenableWorkerBuilder
now uses the correctWorkerFactory
when creating instances ofListenableWorker
. b/135275844 - Fixed a bug which caused drifts in the execution windows for
WorkRequest
s due to process death. b/135272196
Версия 2.1.0-beta01
13 июня 2019 года
androidx.work:work-*:2.1.0-beta01
is released. Коммуты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- WorkManager now depends on
Room 2.1.0
, which should fix some database issues. - Removed some startup disk I/O on the main thread.
- Fixed a potential deadlock in constraint tracking. b/134361006
- Preemptively cancelled invalid jobs attributed to WorkManager. b/134058261
- Added some defensive calls to JobScheduler APIs for misbehaving devices.
Version 2.1.0-alpha03
June 5, 2019
androidx.work:*:2.1.0-alpha03
is released.
Исправления ошибок
- Improved documentation for
PeriodicWorkRequest
s. -
WorkManagerTestInitHelper
now uses the correct background executor for tests. - Fixes for SQLite issues when dealing with large transactions on some devices. ( b/130182503 )
- WorkManager's dependencies are now more granular. ( b/133169148 ).
- Workaround OEM specific bugs in the implementation of
JobScheduler
when scheduling jobs using WorkManager. - Improvements in the AlarmManager based scheduler around service lifetimes that previously caused rare crashes. ( b/133313734 )
Version 2.1.0-alpha02
May 16, 2019
WorkManager 2.1.0-alpha02 is released. This version contains several new APIs.
Изменения API
PeriodicWorkRequest
s now support initial delays. You can use thesetInitialDelay
method onPeriodicWorkRequest.Builder
to set an initial delay. b/111404867Added the ability to delegate to one or more registered
WorkerFactory
s usingDelegatingWorkerFactory
. b/131435993Added the ability to customize the
Executor
used by WorkManager for all its internal book-keeping viaConfiguration.Builder.setTaskExecutor
.Improved documentation around
WorkRequest.keepResultsForAtLeast
( b/130638001 ), on-demand initialization, andPeriodicWorkRequest.Builder
( b/131711394 ).
Version 2.1.0-alpha01
April 24, 2019
WorkManager 2.1.0-alpha01 is released. This version contains several new APIs. Please note that starting with this version, there will be new features that won't get backported to the 1.x release. We recommend switching to 2.x.
Изменения API
- Added on-demand initialization for WorkManager, which will create WorkManager only when referenced. b/127497100 To set up your project for on-demand initialization:
- Disable the automatic initializer .
- Implement
Configuration.Provider
on your customApplication
object. - Change all references of
WorkManager.getInstance()
toWorkManager.getInstance(Context)
. As part of this change, we have deprecatedWorkManager.getInstance()
. It is always safer to call the newWorkManager.getInstance(Context)
replacement, even if you're not doing on-demand initialization.
- Added the ability to create unit testable
Worker
andListenableWorker
classes by usingTestWorkerBuilder
andTestListenableWorkerBuilder
in thework-testing
artifact.- Note that
work-testing
now pulls in Kotlin as a dependency, but also includes several Kotlin extensions by default.
- Note that
- Added run attempt count to
WorkInfo
. b/127290461 -
Data
types can now store and retrieve bytes and byte arrays. This does NOT change the maximum size ofData
objects. - Deprecated
CoroutineWorker.coroutineContext
. This field was incorrectly typed as aCoroutineDispatcher
; you should no longer need it as you can go to the desired coroutineContext yourself in the body of the suspending function. -
RxWorker.createWork()
andRxWorker.getBackgroundScheduler()
are now annotated with@NonNull
return types.
Version 2.0.1
Version 2.0.1
April 9, 2019
WorkManager 2.0.1 is released. This release is identical to 2.0.1-rc01 .
Version 2.0.1-rc01
April 3, 2019
WorkManager 2.0.1-rc01 is released. This version contains some bug fixes. For legacy 1.x users, some of these changes also appear in 1.0.1-rc01 .
Исправления ошибок
- 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 - Updated documentation for
PeriodicWorkRequest
s to indicate that flex time is not supported on API 23. - Fixed some broken links in the Kotlin documentation.
Version 2.0.0
Version 2.0.0
March 20, 2019
WorkManager 2.0.0 is released. This version is identical to 2.0.0-rc01 and is the AndroidX version of 1.0.0 stable with AndroidX dependencies. We recommend targeting this version instead of the legacy 1.x versions. All active development will target 2.x and 1.x will only receive critical bug fixes for a limited time.
Version 2.0.0-rc01
March 7, 2019
WorkManager 2.0.0-rc01 is released. This version is identical to 1.0.0 stable but has AndroidX dependencies. Once this reaches 2.0.0 stable, you should include this version and the legacy 1.x versions will only receive some critical bug fixes. All active development will target 2.x.
Pre-AndroidX Dependencies
Reference docs: 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
April 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.
Версия 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
Версия 1.0.0-бета04
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.
Версия 1.0.0-бета03
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.
Версия 1.0.0-бета02
January 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
Версия 1.0.0-бета01
December 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).
Версия 1.0.0-альфа13
December 12, 2018
This release contains a minor API change that will be helpful for some Kotlin users.
Изменения API
-
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
.
Версия 1.0.0-альфа12
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
- 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.
Версия 1.0.0-альфа11
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
-
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
.
Версия 1.0.0-альфа10
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
- 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.
Версия 1.0.0-альфа09
September 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' } }
Котлин
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
- 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
Breaking Changes
- The default
Worker
andNonBlockingWorker
constructors are deprecated. Please migrate to the new constructor ASAP. Future versions will remove the default constructor.
Версия 1.0.0-альфа08
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
Версия 1.0.0-альфа07
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
-
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.
Версия 1.0.0-альфа06
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
Версия 1.0.0-альфа05
July 24, 2018
Изменения API
-
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
Breaking Changes
-
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[])
.
Версия 1.0.0-альфа04
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.
Версия 1.0.0-альфа03
June 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
- 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
Behavior Changes
- 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
Breaking Changes
- Renamed
Worker.WorkerResult
toWorker.Result
. -
Worker.onStopped
now has an additionalisCancelled
parameter which is set totrue
when theWorker
has explicitly been cancelled.
Версия 1.0.0-альфа02
May 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
-
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.
Версия 1.0.0-альфа01
May 8, 2018
WorkManager simplifies scheduling and execution of guaranteed, constraint-aware background work. This initial release is 1.0.0-alpha01
.