Менеджер работ

API WorkManager позволяет легко планировать отложенные асинхронные задачи, которые должны выполняться надежно. Эти API позволяют вам создать задачу и передать ее WorkManager для запуска при выполнении рабочих ограничений.
Последнее обновление Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
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

Версия 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 . Кроме того, добавлен новый API getConfiguration() для разработчиков библиотек, позволяющий получить конфигурацию, с которой был инициализирован 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 . Кроме того, добавлен новый API getConfiguration() для разработчиков библиотек, позволяющий получить конфигурацию, с которой был инициализирован 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(...) . Чтобы лучше поддерживать ситуации, когда приложение не подпадает под ограничения служб переднего плана , разработчики могут использовать API ListenableWorker.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 при использовании API AlarmManager . ( аосп/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 )

Изменения 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 )

Внешний вклад

Версия 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 Methods withStates , 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 должен использовать при непосредственном использовании API JobService . ( AOSP/1223567 )

Изменения API

  • Добавьте ExistingWorkPolicy.APPEND_OR_REPLACE , который похож на APPEND , но заменяет цепочку, которая отменила или провалилась предпосылки. ( B/134613984 , AOSP/1199640 )

  • Предоставьте возможность добавить пользовательский RunnableScheduler для отслеживания WorkRequest , которые необходимо выполнить в будущем. Это используется в программе Processess. ( AOSP/1203944 )

Исправления ошибок

  • Устаревший setProgress() у RxWorker , потому что он ранее возвращал Single<Void> , который является невозможным типом. Добавлен новый API setCompletableProgress() , который возвращает 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 , теперь может установить прогресс через API setProgressAsync() . Также добавлено соответствующий API suspend setProgress -ING в CoroutineWorker и setProgress в RxWorker , который возвращает Single<Void> . С этими новыми APIS работники могут передавать информацию о прогрессе через WorkInfo , который имеет соответствующий API getProgress . ( B/79481554 )
  • Data имеют API containsKey() , который можно использовать для проверки этих входных данных для 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 при использовании API JobScheduler на некоторых устройствах. ( 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 для настройки вашего проекта для инициализации по требованию:
    1. Отключите автоматический инициализатор .
    2. Реализовать Configuration.Provider в вашем пользовательском объекте Application .
    3. Измените все ссылки на 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 для настройки вашего проекта для инициализации по требованию:
    1. Отключите автоматический инициализатор .
    2. Реализовать Configuration.Provider в вашем пользовательском объекте Application .
    3. Измените все ссылки на 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.

Зависимости до антирода

Информацию об использовании расширений Kotlin см. В документации KTX .
Справочные документы: 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/124546316

  • Worker , которые бросают неконтролируемое 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() to Operation.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 a WorkInfo with the CANCELLED State during ListenableWorker.onStopped() .
  • Treat null Result s as failures in ListenableWorker . 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 into Result . Result is now a "sealed class" with three concrete implementations, which you can obtain via Result.success() (or Result.success(Data) ), Result.failure() (or Result.failure(Data) ), and Result.retry() . Your ListenableFuture s now result Result instead of Payload . Worker s don't have getter and setter methods for output Data .
  • Added Operation.await() and ListenableFuture.await() Kotlin extension methods.
  • Renamed Operation.getException() to Operation.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 , and OneTimeWorkRequest to streamline the API. To fix any build problems, you can wrap your existing varargs with Arrays.asList(...) . We still include single-argument versions of each method.
  • Removed WorkContinuation.combine(OneTimeWorkRequest, *) variants. They were presenting a confusing API; the existing combine 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 new CoroutineWorker .
  • WorkStatus has been renamed to WorkInfo . All corresponding getStatus method variants have been renamed to the corresponding getWorkInfo variants. This is a breaking change.
  • ListenableWorker.onStopped() no longer accepts has a boolean argument representing if the WorkRequest was cancelled. WorkManager no longer makes this distinction. This is a breaking change.
  • androidx.work.test package has been renamed to androidx.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() and WorkerParameters.getTriggeredContentAuthorities() previously returned arrays. Now these methods return Collections. This is a breaking change.
  • ListenableWorker.onStartWork() is renamed to ListenableWorker.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() and Configuration.getMinJobSchedulerID() are renamed to Configuration.getMinJobSchedulerId() and Configuration.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 unique OneTimeWorkRequest s without having to create a WorkContinuation .
  • All variants of enqueue and cancel methods on WorkManager now return a new Operation type. This is a breaking change.
  • All variants of enqueue no longer accept varargs for WorkRequest s. This is a breaking change. Use Collections instead. You can use Arrays.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 an IllegalStateException . This is a breaking change.

Исправления ошибок

  • WorkRequest.Builder s in the work-runtime-ktx artifact now use ListenableWorker 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 to WorkInfo . All corresponding getStatus method variants have been renamed to the corresponding getWorkInfo variants.
  • ListenableWorker.onStopped() no longer accepts has a boolean argument representing if the WorkRequest was cancelled. WorkManager no longer makes this distinction.
  • androidx.work.test package has been renamed to androidx.work.testing package.
  • Setters on Constraints are no longer a part of the public API.
  • WorkerParameters.getTriggeredContentUris() and WorkerParameters.getTriggeredContentAuthorities() previously returned arrays. Now these methods return Collections.
  • ListenableWorker.onStartWork() is renamed to ListenableWorker.startWork() .
  • The constructor for WorkStatus is no longer a part of the public API.
  • Configuration.getMaxJobSchedulerID() and Configuration.getMinJobSchedulerID() are renamed to Configuration.getMinJobSchedulerId() and Configuration.getMaxJobSchedulerId() respectively.
  • All variants of enqueue and cancel methods on WorkManager now return a new Operation type.
  • All variants of enqueue no longer accept varargs for WorkRequest s.
  • Attempting to initialize WorkManager more than once per process will now result in an IllegalStateException .

Версия 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 default Worker constructor. This is a breaking API change.
  • Renamed NonBlockingWorker to ListenableWorker , 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 the ListenableFuture appropriately. Reference implementations of ListenableFuture s are provided in the Futures package in alpha02 (see below the WorkManager section).
    • Worker extends ListenableWorker and still operates as before, with an abstract Result doWork() method.
    • Shuffled some methods and members from Worker to ListenableWorker .
    • 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 implementation DefaultWorkerFactory have been merged into an abstract class called WorkerFactory . The implementation ensures that the default reflection-based behavior is called as a last-ditch effort for any user-created WorkerFactory instances. This is a breaking change.
  • Removed WorkManager.synchronous() and WorkContinuation.synchronous() and all related methods. Added ListenableFuture<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 return void ; it now returns a ListenableFuture<Void> . You can call ListenableFuture.addListener(Runnable, Executor) or ListenableFuture.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 the Future s contract.
    • To maintain parity with the synchronous getStatus* methods, we have provided ListenableFuture variants, and renamed the existing ones that returned LiveData to explicitly have "LiveData" as part of the name (for example, getStatusesByIdLiveData(UUID) ). This is a breaking API change.

Исправления ошибок

  • Fixed the known issue from alpha09 regarding duplicate androidx-annotations.pro files. You may remove the workaround from the previous release notes by deleting exclude '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 was REPLACE d. b/116253486 and b/116677275
  • WorkContinuation.combine() now accepts one or more WorkContinuation s instead of two or more. b/117266752

Breaking API Changes

  • Removed all previously deprecated methods and classes, notably the default Worker constructor.
  • The interface WorkerFactory and the concrete implementation DefaultWorkerFactory have been merged into an abstract class called WorkerFactory .
  • Removed WorkManager.synchronous() and WorkContinuation.synchronous() .
  • WorkManager.getStatus*() methods now return ListenableFuture s. WorkManager.getStatus*LiveData() return LiveData 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 underlying Worker . 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 a WorkerFactory as part of the WorkManager.Configuration . The fallback factory is DefaultWorkerFactory , which matches behavior of previous versions of WorkManager.
    • The default constructors for Worker and NonBlockingWorker are now marked as deprecated. Please use the new constructor ( Worker(Context, WorkerParameters) ) and call super(Context, WorkerParameters) ; future versions of WorkManager will remove the default constructor.
  • 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 of NonBlockingWorker .
  • Add ability to trigger timed work in TestDriver via TestDriver.setInitialDelayMet(UUID) and TestDriver.setPeriodDelayMet(UUID) . b/113360060

Breaking Changes

  • The default Worker and NonBlockingWorker 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 in JobScheduler 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 in ConstraintTracker . b/112272753
  • Changed return type annotations of Data.getBooleanArray(String) and Data.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) and Data.getIntArray(String) to @Nullable instead of @NonNull . b/112275229
  • Kotlin extensions: deprecated Map.toWorkData() and added a top-level workDataOf(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 using WorkRequest.Builder#build() . b/111408337
  • Enable the use of RescheduleReceiver only when there are WorkRequest 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 an IllegalStateException . This is a breaking API change.
  • Added a new API, Configuration.Builder.setMinimumLoggingLevel(int) , which can control WorkManager verbosity. By default, WorkManager logs Log.INFO and above.
  • Changed signature of Data.getString() so it no longer takes a default value (it is implicitly null ). This is a breaking API change.
  • Marked some methods needed only for internal usage as @hide . This includes the Constraints constructor, Data.toByteArray() , and Data.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 using JobScheduler . 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 given WorkRequest . 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 implicitly null ).
  • Marked some methods needed only for internal usage as @hide . This includes the Constraints constructor, Data.toByteArray() , and Data.fromByteArray(byte[]) .

Версия 1.0.0-альфа04

June 26, 2018

Исправления ошибок

  • PeriodicWorkRequest s are now correctly rescheduled when using the AlarmManager 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 version 1.1.1-rc1 .

Изменения API

  • Added getStatusesSync() , the synchronous version of WorkContinuation.getStatuses() .
  • Worker has the ability to distinguish between user-initiated cancellation and temporary os-requested stopping. Worker.isStopped() returns true if any kind of stop has been requested. Worker.isCancelled() returns true 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 to JobScheduler or AlarmManager . This helps prevent WorkManager from taking all your available JobScheduler slots.
  • Added Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) which helps define a range of JobScheduler job ids safe for WorkManager to use. b/79996760
  • Worker.getRunAttemptCount() returns the current run count for a given Worker . b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) allows you to enqueue a unique PeriodicWorkRequest s. b/79600647
  • WorkManager.cancelAllWork() cancels all Worker s. Libraries that depend on WorkManager can query when this method was called last by using WorkManager.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 the Worker . This allows the ability to remove WorkRequest s without tag s or when the id is not available. b/109572351

Breaking Changes

  • Renamed Worker.WorkerResult to Worker.Result .
  • Worker.onStopped now has an additional isCancelled parameter which is set to true when the Worker has explicitly been cancelled.

Версия 1.0.0-альфа02

May 24, 2018

Исправления ошибок

  • Fixed a NullPointerException on State.isFinished() . b/79550068
  • Fixed an issue which caused Worker s to be rescheduled on Application.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 in Data . b/79443878
  • Data.Builder.putAll() now returns an instance of the Builder . 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 a Worker has been stopped. Worker.onStopped() can be used to perform lightweight cleanup operations.
  • Worker.getTags() API returns a Set of tags associated with the Worker .
  • Added javax.time.Duration overloads for APIs which take a combination of duration and TimeUnit s. This is guarded by @RequiresApi(26) .
  • WorkManager extensions have moved from the androidx.work.ktx package to the androidx.work package. The old extensions are deprecated and will be removed in a future version.
  • Configuration.withExecutor() is deprecated. Use Configuration.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

The WorkManager API makes it easy to schedule deferrable, asynchronous tasks that must be run reliably. These APIs let you create a task and hand it off to WorkManager to run when the work constraints are met.
Последнее обновление Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
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 of WorkManager .

Изменения 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 call stopSelf() . 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 the Worker binds to when using a WorkerFactory . ( 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 in WorkManager . ( I17d7f , b/260214125 )
  • Configuration.workerCoroutineContext was added to for control of dispatcher where CoroutineWorker is executed. It helps to completely avoid usage of Dispatchers.Default in WorkManager . ( Icd1b7 )
  • Add custom exception handlers for Workers ( Ib1b74 , b/261190695 )
  • OneTimeWorkRequest.Builder and PeriodicWorkRequest.Builder can now be constructed with KClass instead of Class : val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() ( Ib55f6 )
  • WorkManager class was migrated to Kotlin. Now methods that return LiveData , ListenableFuture or Flow 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 the Constraints.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 .

Исправления ошибок

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 of LiveData , Worker's progress now can be observed via Flow's via WorkManager.getWorkInfosFlow and similar methods.
  • Now WorkManager provides a hint on why a worker was previously stopped. It can be queried from a worker itself via getStopReason() method or from WorkInfo via getStopReason() .
  • 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 in initializeTestWorkManager to preserve executors set in Configuration 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 to WorkInfo . It makes stopReason available after the worker has run. It could be helpful in the reporting stopReason 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 to ListenableWorker 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 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 in Constraints.Builder that existed from early versions of WorkManager . ( I6d7d2 )
  • WorkManager now has a separate limit for content uri workers to give them guaranteed slots in JobScheduler to prevent missing content updates under the high load. The limit can be configured via Configuration.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

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 via getStopReason() method or from WorkInfo via getStopReason() .

Изменения API

  • stopReason was added to WorkInfo . It makes available stopReason after the worker ran. It could be helpful in the reporting stopReason 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 to ListenableWorker 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 using TestDriver 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 of LiveData , Worker's progress now can be observed via Flow's via WorkManager.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 in Configuration 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

  • 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 main work-runtime artifact. ( I71a9a )
  • Added setNextScheduleTimeOverride method, which allows accurate setting of periodic work schedules ( I3b4da )
  • Renamed getEarliestRunTimeMillis to getNextScheduleTimeMillis . ( 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 in Constraints.Builder that existed from early versions of WorkManager . ( I6d7d2 )
  • WorkManager now has a separate limit for content uri workers to give them guaranteed slots in JobScheduler to prevent missing content updates under the high load. Limit can be configured via Configuration.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

Новые возможности

Изменения 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 existing REPLACE , 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 named REPLACE and UPDATE . If you still want to keep the previous semantics of REPLACE , the newly added CANCEL_AND_REENQUEUE , which is identical to REPLACE , 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 from androidx.work:work-runtime-ktx to androidx.work:work-runtime ( I0010f , b/209145335 )
  • Helper methods WorkQuery.fromIds , WorkQuery.fromStates , WorkQuery.fromUniqueWorkNames , WorkQuery.fromTags were added to create WorkQuery directly. ( b/199919736 ) ( If48f2 , b/199919736 )
  • Added getForegroundInfo to Worker . ( Ic1ead )
  • RxWorker both for RxJava 2 and RxJava 3 now has setForeground returning Completable that can be used instead of setForegroundInfoAsync that returns ListenableFuture
  • RxWorker both for RxJava 2 and RxJava 3 has getForegroundInfo returning Single that can be used instead of getForegroundInfoAsync that returns ListenableFuture . ( 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 new getConfiguration() API for library developers to get the configuration that WorkManager 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 the ListenableFuture when using suspendCancellableCoroutine .

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 in WorkInfo , 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() and WorkerParameters.getGeneration() were added that return the generation of a worker. A worker has multiple generations, if it was updated via WorkManager.updateWork or WorkManager.enqueueUniquePeriodicWork using ExistingPeriodicWorkPolicy.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 initialize WorkManager . ( 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. See WorkManager.updateWork and ExistingPeriodicWorkPolicy.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 existing REPLACE , 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 named REPLACE and UPDATE . If you still want to keep the previous semantics of REPLACE , the newly added CANCEL_AND_REENQUEUE , which is identical to REPLACE , 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 from androidx.work:work-runtime-ktx to androidx.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 new getConfiguration() API for library developers to get the configuration that WorkManager 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 to Worker . ( Ic1ead )
  • Helper methods WorkQuery.fromIds to create WorkQuery directly from ids were added. ( Ie5bdf , b/199919736 )
  • RxWorker now has setForeground returning Completable that can be used instead of setForegroundInfoAsync that returns ListenableFuture . ( I85156 )
  • RxWorker for RxJava 2 now has getForegroundInfo returning Single that can be used instead of getForegroundInfoAsync that returns ListenableFuture . ( I21c91 , b/203851459 )
  • RxWorker for RxJava 3 now has getForegroundInfo returning Single that can be used instead of getForegroundInfoAsync that returns ListenableFuture . ( I1ca8a )
  • RxWorker now has setForeground returning Completable that can be used instead of setForegroundInfoAsync that returns ListenableFuture . ( I992a3 , b/203851459 )

Исправления ошибок

  • Propagate cancellations in the CoroutineScope to the ListenableFuture when using suspendCancellableCoroutine . ( 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 the ListenableFuture when using suspendCancellableCoroutine . ( 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 the ListenableWorker.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.

Новые возможности

Изменения API

Версия 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 in JobScheduler 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 used tools:node="remove" the ContentProvider 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 from RemoteWorkManagerService which allows RemoteWorkManagerService to clean up correctly. aosp/1730694
  • RemoteListenableWorker now correctly unbinds from RemoteWorkerService which allows RemoteWorkerService 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 of RemoteListenableWorker 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 other androidx.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 uses androidx.startup to initialize WorkManager. Previously, this was being done by androidx.work.impl.WorkManagerInitializer . ( aosp/1608813 )

    If you used tools:node="remove" the ContentProvider 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's outputData . ( Ie51e3 )

Исправления ошибок

  • Add a workaround for an OEM bug which causes a SecurityException to be thrown when using AlarmManager 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.
  • Sometimes, ActivityManager cannot instantiate the JobService 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 single WorkRequest when an Application 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 that WorkRequest s are tracked after a WorkRequest is complete. The duration was 7 days previously. It has been reduced to 1 day + the keepResultsForAtLeast duration. ( aosp/1419708 )
  • The TestListenableWorkerBuilder now supports the reified class extending ListenableWorker 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 the WorkQuery 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 a ListenableWorker 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 of WorkRequest 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 them ENQUEUED 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 and TestWorkerBuilder 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 and RemoteWorkContinuation . 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 query WorkInfo 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) . The processName is a fully qualified process name which looks like packageName:processName (eg com.example:remote ).
    • A set of new APIs: RemoteWorkManager and RemoteWorkContinuation to enqueue , cancel and query work requests. These APIs do not include LiveData variants to avoid SQLite contention across multiple-processes. All calls to enqueue , cancel and query are forwarded to a primary app process using AIDL and return a fluent ListenableFuture . ( aosp/1392657 , aosp/1411210 , aosp/1412215 , aosp/1417713 )

Изменения API

  • WorkManager now prunes completed WorkRequest s that have no incomplete dependencies more aggressively. The buffer duration changed from 7 days to 1 day. ( aosp/1419708 )

Исправления ошибок

  • WorkManager now reconciles jobs proactively so WorkRequest s and JobScheduler jobs are in sync when WorkManager 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 )

Внешний вклад

Версия 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-process Scheduler would only consider executing work that was not delayed and whose constraints were met. Now, the in-process scheduler tracks WorkRequest s which might be executed in the future, including PeriodicWorkRequests. The in-process Scheduler also does not observe scheduling limits (but is still restricted to the size of the Executor 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 configurable RunnableScheduler . ( 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 a WorkQuery . This is useful when developers want to query WorkInfo s by a combination of multiple attributes. For more information look at WorkQuery.Builder.fromStates(...) , WorkQuery.Builder. fromTags(...) or WorkQuery.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 to APPEND , 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 using setForegroundAsync() 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 now public when using the default WorkerFactory . ( aosp/1291262 )
  • Calls to setForegroundAsync() that do not complete before completion of a ListenableWorker will now be signalled via an IllegalStateException on the returned ListenableFuture . ( aosp/1262743 )

  • Fix a bug where the ForegroundService is not stopped after a foreground Worker is interrupted. ( b/155579898 , aosp/1302153 )

  • Fix a bug where WorkManager attempts to execute multiple instances of a Worker 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 foreground Worker is interrupted. ( b/155579898 , aosp/1302153 )
  • Fix a bug where WorkManager attempts to execute multiple instances of a Worker 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 now public when using the default WorkerFactory . ( aosp/1291262 )

Изменения API

  • Calling setProgressAsync() after a ListenableWorker has finished execution will now signal an Exception via the ListenableFuture . ( aosp/1285494 )
  • WorkQuery.Builder is now marked final . ( aosp/1275037 )
  • WorkQuery.Builder factory methods withStates , withTags and withUniqueWorkNames have been renamed to fromStates , fromTags and fromUniqueWorkNames respectively. ( aosp/1280287 )

Исправления ошибок

Версия 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 both Constraints.setRequiresCharging(...) and Constraints.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 a WorkQuery . This is useful when developers want to query WorkInfo s by a combination of multiple attributes. For more information look at WorkQuery.Builder withStates(...) , WorkQuery.Builder withTags(...) or WorkQuery.Builder withUniqueWorkNames(...) . ( aosp/1253230 , b/143847546 )

  • Calls to setForegroundAsync() that do not complete before completion of a ListenableWorker will now be signalled via an IllegalStateException on the returned ListenableFuture . ( 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 tracks WorkRequest s which might be executed in the future, including PeriodicWorkRequest s. The in-process Scheduler also does not observe scheduling limits (but is still restricted to the size of the Executor being used by WorkManager). This means that the application can now execute a lot more WorkRequest 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 using setForegroundAsync() APIs. ( b/147873061 , aosp/1215915 )
    • Specifying JobScheduler ids that WorkManager should use when using JobService APIs directly. ( aosp/1223567 )

Изменения API

  • Add ExistingWorkPolicy.APPEND_OR_REPLACE which is similar to APPEND , but replaces a chain that has cancelled or failed prerequisites. ( b/134613984 , aosp/1199640 )

  • Provide the ability to add a custom RunnableScheduler to track WorkRequest s that need to be executed in the future. This is used by the in-process Scheduler. ( aosp/1203944 )

Исправления ошибок

  • Deprecated setProgress() in RxWorker because it previously returned a Single<Void> which is an impossible type. Added a new API setCompletableProgress() which returns a Completable 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 running Worker s that run when a foreground Service is active. ( aosp/1218539 , b/147249312 )
  • WorkManager now depends on androidx.sqlite:sqlite-framework:2.1.0 stable. ( aosp/1217729 )
  • Added lint rules to ensure that a foregroundServiceType is specified in the AndroidManifest.xml when using foregroundServiceType s in ForegroundInfo . ( 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 an api dependency on work-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 the AndroidManifest.xml when using on demand initialization. ( aosp/1167007 )
  • Added a lint warning when enqueue() is used for a PeriodicWorkRequest instead of enqueueUniquePeriodicWork() . ( aosp/1166032 )

API changes

  • ForegroundInfo now requires you to specify the notificationId to be used when using ListenableWorker.setForegroundAsync() . This is a breaking change. This allows you to run multiple long running Worker s in parallel. WorkManager also better manages lifetimes of the provided Notification 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 incorrect WorkContinuation 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 cancel WorkRequest s without having to register another component in the AndroidManifest.xml . This API makes it especially easy to cancel WorkRequest s from Notification 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() to ForegroundInfo.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() (or CoroutineWorker#setForeground() for Kotlin). ( aosp/1133636 )

API changes

  • The containsKey API in Data is renamed to hasKeyWithValueOfType . The corresponding extension method in the ktx 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 useful toString() representation. ( b/140945323 )
  • Data now has a better equals() method. It also supports deepEquals for Array 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 the setProgressAsync() API. Also added a corresponding suspend -ing setProgress API in CoroutineWorker and a setProgress in RxWorker which returns a Single<Void> . With these new APIs Workers can convey progress information via WorkInfo which has a corresponding getProgress API. ( b/79481554 )
  • Data has a containsKey() API which can be used to validate that input data to Worker s has keys with the expected type. ( b/117136838 )
  • Data can now be serialized using Data.toByteArray() and Data.fromByteArray() . Note that there are no versioning guarantees with Data 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 via Configuration.setInputMergerFactory . ( b/133273159 )

API changes

  • WorkManager will throw an instance of IllegalStateException if a WorkerFactory returns an instance of ListenableWorker which has been previously invoked. ( b/139554406 )
  • Documentation updates around ListenableFuture cancellation and the onStopped() callback in ListenableWorker . ( b/138413671 )

Исправления ошибок

  • The in-process Scheduler now ignores WorkRequest s with the idle constraint. These requests are now only picked up by JobScheduler when the device is actually idle . ( aosp/1089779 )
  • TestScheduler now correctly uses the specified Executor 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 using JobScheduler 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 your build.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:
    1. Disable the automatic initializer .
    2. Implement Configuration.Provider on your custom Application object.
    3. Change all references of WorkManager.getInstance() to WorkManager.getInstance(Context) . As part of this change, we have deprecated WorkManager.getInstance() . It is always safer to call the new WorkManager.getInstance(Context) replacement, even if you're not doing on-demand initialization.
  • PeriodicWorkRequest s now support initial delays. You can use the setInitialDelay method on PeriodicWorkRequest.Builder to set an initial delay. b/111404867
  • Added the ability to delegate to one or more registered WorkerFactory s using DelegatingWorkerFactory . b/131435993
  • Added the ability to customize the Executor used by WorkManager for all its internal book-keeping via Configuration.Builder.setTaskExecutor .
  • Added the ability to create unit testable Worker and ListenableWorker classes by using TestWorkerBuilder and TestListenableWorkerBuilder in the work-testing artifact.
    • Note that work-testing now pulls in Kotlin as a dependency and includes several Kotlin extensions by default.
  • 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 of Data 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 correct WorkerFactory when creating instances of ListenableWorker . 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 the setInitialDelay method on PeriodicWorkRequest.Builder to set an initial delay. b/111404867

  • Added the ability to delegate to one or more registered WorkerFactory s using DelegatingWorkerFactory . b/131435993

  • Added the ability to customize the Executor used by WorkManager for all its internal book-keeping via Configuration.Builder.setTaskExecutor .

  • Improved documentation around WorkRequest.keepResultsForAtLeast ( b/130638001 ), on-demand initialization, and PeriodicWorkRequest.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:
    1. Disable the automatic initializer .
    2. Implement Configuration.Provider on your custom Application object.
    3. Change all references of WorkManager.getInstance() to WorkManager.getInstance(Context) . As part of this change, we have deprecated WorkManager.getInstance() . It is always safer to call the new WorkManager.getInstance(Context) replacement, even if you're not doing on-demand initialization.
  • Added the ability to create unit testable Worker and ListenableWorker classes by using TestWorkerBuilder and TestListenableWorkerBuilder in the work-testing artifact.
    • Note that work-testing now pulls in Kotlin as a dependency, but also includes several Kotlin extensions by default.
  • 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 of Data objects.
  • Deprecated CoroutineWorker.coroutineContext . This field was incorrectly typed as a CoroutineDispatcher ; you should no longer need it as you can go to the desired coroutineContext yourself in the body of the suspending function.
  • RxWorker.createWork() and RxWorker.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

For information on using Kotlin extensions, see the KTX documentation .
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/124546316

  • Worker s that throw an unchecked Exception are now correctly marked as FAILED 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 in 1.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 dependency 1.1.1 instead of 1.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 of ListenableWorker . This prevents refactoring conflicts with Kotlin's top-level Result class. This is a breaking API change. b/120564418

Breaking API Changes

  • androidx.work.Result has been moved to be an inner class of ListenableWorker .

Версия 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 , introduces RxWorker . This is a ListenableWorker that expects a Single<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 into Result . Result is now a "sealed class" with three concrete implementations, which you can obtain via Result.success() (or Result.success(Data) ), Result.failure() (or Result.failure(Data) ), and Result.retry() . Your ListenableFuture s now result Result instead of Payload . Worker s don't have getter and setter methods for output Data . This is a breaking change.
  • Added Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) and Constraints.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() and ListenableFuture.await() Kotlin extension methods.
  • Renamed Operation.getException() to Operation.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 , and OneTimeWorkRequest to streamline the API. To fix any build problems, you can wrap your existing varargs with Arrays.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 existing combine 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 via observeForever 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 a WorkInfo with the CANCELLED State during ListenableWorker.onStopped() .
  • Treat null Result s as failures in ListenableWorker . 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 into Result . Result is now a "sealed class" with three concrete implementations, which you can obtain via Result.success() (or Result.success(Data) ), Result.failure() (or Result.failure(Data) ), and Result.retry() . Your ListenableFuture s now result Result instead of Payload . Worker s don't have getter and setter methods for output Data .
  • Added Operation.await() and ListenableFuture.await() Kotlin extension methods.
  • Renamed Operation.getException() to Operation.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 , and OneTimeWorkRequest to streamline the API. To fix any build problems, you can wrap your existing varargs with Arrays.asList(...) . We still include single-argument versions of each method.
  • Removed WorkContinuation.combine(OneTimeWorkRequest, *) variants. They were presenting a confusing API; the existing combine 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 new CoroutineWorker .
  • WorkStatus has been renamed to WorkInfo . All corresponding getStatus method variants have been renamed to the corresponding getWorkInfo variants. This is a breaking change.
  • ListenableWorker.onStopped() no longer accepts has a boolean argument representing if the WorkRequest was cancelled. WorkManager no longer makes this distinction. This is a breaking change.
  • androidx.work.test package has been renamed to androidx.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() and WorkerParameters.getTriggeredContentAuthorities() previously returned arrays. Now these methods return Collections. This is a breaking change.
  • ListenableWorker.onStartWork() is renamed to ListenableWorker.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() and Configuration.getMinJobSchedulerID() are renamed to Configuration.getMinJobSchedulerId() and Configuration.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 unique OneTimeWorkRequest s without having to create a WorkContinuation .
  • All variants of enqueue and cancel methods on WorkManager now return a new Operation type. This is a breaking change.
  • All variants of enqueue no longer accept varargs for WorkRequest s. This is a breaking change. Use Collections instead. You can use Arrays.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 an IllegalStateException . This is a breaking change.

Исправления ошибок

  • WorkRequest.Builder s in the work-runtime-ktx artifact now use ListenableWorker 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 to WorkInfo . All corresponding getStatus method variants have been renamed to the corresponding getWorkInfo variants.
  • ListenableWorker.onStopped() no longer accepts has a boolean argument representing if the WorkRequest was cancelled. WorkManager no longer makes this distinction.
  • androidx.work.test package has been renamed to androidx.work.testing package.
  • Setters on Constraints are no longer a part of the public API.
  • WorkerParameters.getTriggeredContentUris() and WorkerParameters.getTriggeredContentAuthorities() previously returned arrays. Now these methods return Collections.
  • ListenableWorker.onStartWork() is renamed to ListenableWorker.startWork() .
  • The constructor for WorkStatus is no longer a part of the public API.
  • Configuration.getMaxJobSchedulerID() and Configuration.getMinJobSchedulerID() are renamed to Configuration.getMinJobSchedulerId() and Configuration.getMaxJobSchedulerId() respectively.
  • All variants of enqueue and cancel methods on WorkManager now return a new Operation type.
  • All variants of enqueue no longer accept varargs for WorkRequest s.
  • Attempting to initialize WorkManager more than once per process will now result in an IllegalStateException .

Версия 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 default Worker constructor. This is a breaking API change.
  • Renamed NonBlockingWorker to ListenableWorker , 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 the ListenableFuture appropriately. Reference implementations of ListenableFuture s are provided in the Futures package in alpha02 (see below the WorkManager section).
    • Worker extends ListenableWorker and still operates as before, with an abstract Result doWork() method.
    • Shuffled some methods and members from Worker to ListenableWorker .
    • 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 implementation DefaultWorkerFactory have been merged into an abstract class called WorkerFactory . The implementation ensures that the default reflection-based behavior is called as a last-ditch effort for any user-created WorkerFactory instances. This is a breaking change.
  • Removed WorkManager.synchronous() and WorkContinuation.synchronous() and all related methods. Added ListenableFuture<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 return void ; it now returns a ListenableFuture<Void> . You can call ListenableFuture.addListener(Runnable, Executor) or ListenableFuture.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 the Future s contract.
    • To maintain parity with the synchronous getStatus* methods, we have provided ListenableFuture variants, and renamed the existing ones that returned LiveData to explicitly have "LiveData" as part of the name (for example, getStatusesByIdLiveData(UUID) ). This is a breaking API change.

Исправления ошибок

  • Fixed the known issue from alpha09 regarding duplicate androidx-annotations.pro files. You may remove the workaround from the previous release notes by deleting exclude '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 was REPLACE d. b/116253486 and b/116677275
  • WorkContinuation.combine() now accepts one or more WorkContinuation s instead of two or more. b/117266752

Breaking API Changes

  • Removed all previously deprecated methods and classes, notably the default Worker constructor.
  • The interface WorkerFactory and the concrete implementation DefaultWorkerFactory have been merged into an abstract class called WorkerFactory .
  • Removed WorkManager.synchronous() and WorkContinuation.synchronous() .
  • WorkManager.getStatus*() methods now return ListenableFuture s. WorkManager.getStatus*LiveData() return LiveData 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 underlying Worker . 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 a WorkerFactory as part of the WorkManager.Configuration . The fallback factory is DefaultWorkerFactory , which matches behavior of previous versions of WorkManager.
    • The default constructors for Worker and NonBlockingWorker are now marked as deprecated. Please use the new constructor ( Worker(Context, WorkerParameters) ) and call super(Context, WorkerParameters) ; future versions of WorkManager will remove the default constructor.
  • 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 of NonBlockingWorker .
  • Add ability to trigger timed work in TestDriver via TestDriver.setInitialDelayMet(UUID) and TestDriver.setPeriodDelayMet(UUID) . b/113360060

Breaking Changes

  • The default Worker and NonBlockingWorker 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 in JobScheduler 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 in ConstraintTracker . b/112272753
  • Changed return type annotations of Data.getBooleanArray(String) and Data.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) and Data.getIntArray(String) to @Nullable instead of @NonNull . b/112275229
  • Kotlin extensions: deprecated Map.toWorkData() and added a top-level workDataOf(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 using WorkRequest.Builder#build() . b/111408337
  • Enable the use of RescheduleReceiver only when there are WorkRequest 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 an IllegalStateException . This is a breaking API change.
  • Added a new API, Configuration.Builder.setMinimumLoggingLevel(int) , which can control WorkManager verbosity. By default, WorkManager logs Log.INFO and above.
  • Changed signature of Data.getString() so it no longer takes a default value (it is implicitly null ). This is a breaking API change.
  • Marked some methods needed only for internal usage as @hide . This includes the Constraints constructor, Data.toByteArray() , and Data.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 using JobScheduler . 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 given WorkRequest . 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 implicitly null ).
  • Marked some methods needed only for internal usage as @hide . This includes the Constraints constructor, Data.toByteArray() , and Data.fromByteArray(byte[]) .

Версия 1.0.0-альфа04

June 26, 2018

Исправления ошибок

  • PeriodicWorkRequest s are now correctly rescheduled when using the AlarmManager 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 version 1.1.1-rc1 .

Изменения API

  • Added getStatusesSync() , the synchronous version of WorkContinuation.getStatuses() .
  • Worker has the ability to distinguish between user-initiated cancellation and temporary os-requested stopping. Worker.isStopped() returns true if any kind of stop has been requested. Worker.isCancelled() returns true 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 to JobScheduler or AlarmManager . This helps prevent WorkManager from taking all your available JobScheduler slots.
  • Added Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) which helps define a range of JobScheduler job ids safe for WorkManager to use. b/79996760
  • Worker.getRunAttemptCount() returns the current run count for a given Worker . b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) allows you to enqueue a unique PeriodicWorkRequest s. b/79600647
  • WorkManager.cancelAllWork() cancels all Worker s. Libraries that depend on WorkManager can query when this method was called last by using WorkManager.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 the Worker . This allows the ability to remove WorkRequest s without tag s or when the id is not available. b/109572351

Breaking Changes

  • Renamed Worker.WorkerResult to Worker.Result .
  • Worker.onStopped now has an additional isCancelled parameter which is set to true when the Worker has explicitly been cancelled.

Версия 1.0.0-альфа02

May 24, 2018

Исправления ошибок

  • Fixed a NullPointerException on State.isFinished() . b/79550068
  • Fixed an issue which caused Worker s to be rescheduled on Application.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 in Data . b/79443878
  • Data.Builder.putAll() now returns an instance of the Builder . 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 a Worker has been stopped. Worker.onStopped() can be used to perform lightweight cleanup operations.
  • Worker.getTags() API returns a Set of tags associated with the Worker .
  • Added javax.time.Duration overloads for APIs which take a combination of duration and TimeUnit s. This is guarded by @RequiresApi(26) .
  • WorkManager extensions have moved from the androidx.work.ktx package to the androidx.work package. The old extensions are deprecated and will be removed in a future version.
  • Configuration.withExecutor() is deprecated. Use Configuration.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

The WorkManager API makes it easy to schedule deferrable, asynchronous tasks that must be run reliably. These APIs let you create a task and hand it off to WorkManager to run when the work constraints are met.
Последнее обновление Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
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 of WorkManager .

Изменения 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 call stopSelf() . 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 the Worker binds to when using a WorkerFactory . ( 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 in WorkManager . ( I17d7f , b/260214125 )
  • Configuration.workerCoroutineContext was added to for control of dispatcher where CoroutineWorker is executed. It helps to completely avoid usage of Dispatchers.Default in WorkManager . ( Icd1b7 )
  • Add custom exception handlers for Workers ( Ib1b74 , b/261190695 )
  • OneTimeWorkRequest.Builder and PeriodicWorkRequest.Builder can now be constructed with KClass instead of Class : val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() ( Ib55f6 )
  • WorkManager class was migrated to Kotlin. Now methods that return LiveData , ListenableFuture or Flow 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 the Constraints.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 .

Исправления ошибок

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 of LiveData , Worker's progress now can be observed via Flow's via WorkManager.getWorkInfosFlow and similar methods.
  • Now WorkManager provides a hint on why a worker was previously stopped. It can be queried from a worker itself via getStopReason() method or from WorkInfo via getStopReason() .
  • 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 in initializeTestWorkManager to preserve executors set in Configuration 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 to WorkInfo . It makes stopReason available after the worker has run. It could be helpful in the reporting stopReason 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 to ListenableWorker 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 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 in Constraints.Builder that existed from early versions of WorkManager . ( I6d7d2 )
  • WorkManager now has a separate limit for content uri workers to give them guaranteed slots in JobScheduler to prevent missing content updates under the high load. The limit can be configured via Configuration.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

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 via getStopReason() method or from WorkInfo via getStopReason() .

Изменения API

  • stopReason was added to WorkInfo . It makes available stopReason after the worker ran. It could be helpful in the reporting stopReason 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 to ListenableWorker 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 using TestDriver 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 of LiveData , Worker's progress now can be observed via Flow's via WorkManager.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 in Configuration 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

  • 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 main work-runtime artifact. ( I71a9a )
  • Added setNextScheduleTimeOverride method, which allows accurate setting of periodic work schedules ( I3b4da )
  • Renamed getEarliestRunTimeMillis to getNextScheduleTimeMillis . ( 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 in Constraints.Builder that existed from early versions of WorkManager . ( I6d7d2 )
  • WorkManager now has a separate limit for content uri workers to give them guaranteed slots in JobScheduler to prevent missing content updates under the high load. Limit can be configured via Configuration.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

Новые возможности

Изменения 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 existing REPLACE , 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 named REPLACE and UPDATE . If you still want to keep the previous semantics of REPLACE , the newly added CANCEL_AND_REENQUEUE , which is identical to REPLACE , 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 from androidx.work:work-runtime-ktx to androidx.work:work-runtime ( I0010f , b/209145335 )
  • Helper methods WorkQuery.fromIds , WorkQuery.fromStates , WorkQuery.fromUniqueWorkNames , WorkQuery.fromTags were added to create WorkQuery directly. ( b/199919736 ) ( If48f2 , b/199919736 )
  • Added getForegroundInfo to Worker . ( Ic1ead )
  • RxWorker both for RxJava 2 and RxJava 3 now has setForeground returning Completable that can be used instead of setForegroundInfoAsync that returns ListenableFuture
  • RxWorker both for RxJava 2 and RxJava 3 has getForegroundInfo returning Single that can be used instead of getForegroundInfoAsync that returns ListenableFuture . ( 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 new getConfiguration() API for library developers to get the configuration that WorkManager 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 the ListenableFuture when using suspendCancellableCoroutine .

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 in WorkInfo , 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() and WorkerParameters.getGeneration() were added that return the generation of a worker. A worker has multiple generations, if it was updated via WorkManager.updateWork or WorkManager.enqueueUniquePeriodicWork using ExistingPeriodicWorkPolicy.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 initialize WorkManager . ( 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. See WorkManager.updateWork and ExistingPeriodicWorkPolicy.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 existing REPLACE , 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 named REPLACE and UPDATE . If you still want to keep the previous semantics of REPLACE , the newly added CANCEL_AND_REENQUEUE , which is identical to REPLACE , 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 from androidx.work:work-runtime-ktx to androidx.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 new getConfiguration() API for library developers to get the configuration that WorkManager 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 to Worker . ( Ic1ead )
  • Helper methods WorkQuery.fromIds to create WorkQuery directly from ids were added. ( Ie5bdf , b/199919736 )
  • RxWorker now has setForeground returning Completable that can be used instead of setForegroundInfoAsync that returns ListenableFuture . ( I85156 )
  • RxWorker for RxJava 2 now has getForegroundInfo returning Single that can be used instead of getForegroundInfoAsync that returns ListenableFuture . ( I21c91 , b/203851459 )
  • RxWorker for RxJava 3 now has getForegroundInfo returning Single that can be used instead of getForegroundInfoAsync that returns ListenableFuture . ( I1ca8a )
  • RxWorker now has setForeground returning Completable that can be used instead of setForegroundInfoAsync that returns ListenableFuture . ( I992a3 , b/203851459 )

Исправления ошибок

  • Propagate cancellations in the CoroutineScope to the ListenableFuture when using suspendCancellableCoroutine . ( 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 the ListenableFuture when using suspendCancellableCoroutine . ( 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 the ListenableWorker.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.

Новые возможности

Изменения API

Версия 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 in JobScheduler 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 used tools:node="remove" the ContentProvider 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 from RemoteWorkManagerService which allows RemoteWorkManagerService to clean up correctly. aosp/1730694
  • RemoteListenableWorker now correctly unbinds from RemoteWorkerService which allows RemoteWorkerService 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 of RemoteListenableWorker 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 other androidx.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 uses androidx.startup to initialize WorkManager. Previously, this was being done by androidx.work.impl.WorkManagerInitializer . ( aosp/1608813 )

    If you used tools:node="remove" the ContentProvider 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's outputData . ( Ie51e3 )

Исправления ошибок

  • Add a workaround for an OEM bug which causes a SecurityException to be thrown when using AlarmManager 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.
  • Sometimes, ActivityManager cannot instantiate the JobService 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 single WorkRequest when an Application 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 that WorkRequest s are tracked after a WorkRequest is complete. The duration was 7 days previously. It has been reduced to 1 day + the keepResultsForAtLeast duration. ( aosp/1419708 )
  • The TestListenableWorkerBuilder now supports the reified class extending ListenableWorker 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 the WorkQuery 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 a ListenableWorker 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 of WorkRequest 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 them ENQUEUED 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 and TestWorkerBuilder 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 and RemoteWorkContinuation . 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 query WorkInfo 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) . The processName is a fully qualified process name which looks like packageName:processName (eg com.example:remote ).
    • A set of new APIs: RemoteWorkManager and RemoteWorkContinuation to enqueue , cancel and query work requests. These APIs do not include LiveData variants to avoid SQLite contention across multiple-processes. All calls to enqueue , cancel and query are forwarded to a primary app process using AIDL and return a fluent ListenableFuture . ( aosp/1392657 , aosp/1411210 , aosp/1412215 , aosp/1417713 )

Изменения API

  • WorkManager now prunes completed WorkRequest s that have no incomplete dependencies more aggressively. The buffer duration changed from 7 days to 1 day. ( aosp/1419708 )

Исправления ошибок

  • WorkManager now reconciles jobs proactively so WorkRequest s and JobScheduler jobs are in sync when WorkManager 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 )

Внешний вклад

Версия 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-process Scheduler would only consider executing work that was not delayed and whose constraints were met. Now, the in-process scheduler tracks WorkRequest s which might be executed in the future, including PeriodicWorkRequests. The in-process Scheduler also does not observe scheduling limits (but is still restricted to the size of the Executor 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 configurable RunnableScheduler . ( 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 a WorkQuery . This is useful when developers want to query WorkInfo s by a combination of multiple attributes. For more information look at WorkQuery.Builder.fromStates(...) , WorkQuery.Builder. fromTags(...) or WorkQuery.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 to APPEND , 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 using setForegroundAsync() 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 now public when using the default WorkerFactory . ( aosp/1291262 )
  • Calls to setForegroundAsync() that do not complete before completion of a ListenableWorker will now be signalled via an IllegalStateException on the returned ListenableFuture . ( aosp/1262743 )

  • Fix a bug where the ForegroundService is not stopped after a foreground Worker is interrupted. ( b/155579898 , aosp/1302153 )

  • Fix a bug where WorkManager attempts to execute multiple instances of a Worker 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 foreground Worker is interrupted. ( b/155579898 , aosp/1302153 )
  • Fix a bug where WorkManager attempts to execute multiple instances of a Worker 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 now public when using the default WorkerFactory . ( aosp/1291262 )

Изменения API

  • Calling setProgressAsync() after a ListenableWorker has finished execution will now signal an Exception via the ListenableFuture . ( aosp/1285494 )
  • WorkQuery.Builder is now marked final . ( aosp/1275037 )
  • WorkQuery.Builder factory methods withStates , withTags and withUniqueWorkNames have been renamed to fromStates , fromTags and fromUniqueWorkNames respectively. ( aosp/1280287 )

Исправления ошибок

Версия 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 both Constraints.setRequiresCharging(...) and Constraints.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 a WorkQuery . This is useful when developers want to query WorkInfo s by a combination of multiple attributes. For more information look at WorkQuery.Builder withStates(...) , WorkQuery.Builder withTags(...) or WorkQuery.Builder withUniqueWorkNames(...) . ( aosp/1253230 , b/143847546 )

  • Calls to setForegroundAsync() that do not complete before completion of a ListenableWorker will now be signalled via an IllegalStateException on the returned ListenableFuture . ( 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 tracks WorkRequest s which might be executed in the future, including PeriodicWorkRequest s. The in-process Scheduler also does not observe scheduling limits (but is still restricted to the size of the Executor being used by WorkManager). This means that the application can now execute a lot more WorkRequest 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 using setForegroundAsync() APIs. ( b/147873061 , aosp/1215915 )
    • Specifying JobScheduler ids that WorkManager should use when using JobService APIs directly. ( aosp/1223567 )

Изменения API

  • Add ExistingWorkPolicy.APPEND_OR_REPLACE which is similar to APPEND , but replaces a chain that has cancelled or failed prerequisites. ( b/134613984 , aosp/1199640 )

  • Provide the ability to add a custom RunnableScheduler to track WorkRequest s that need to be executed in the future. This is used by the in-process Scheduler. ( aosp/1203944 )

Исправления ошибок

  • Deprecated setProgress() in RxWorker because it previously returned a Single<Void> which is an impossible type. Added a new API setCompletableProgress() which returns a Completable 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 running Worker s that run when a foreground Service is active. ( aosp/1218539 , b/147249312 )
  • WorkManager now depends on androidx.sqlite:sqlite-framework:2.1.0 stable. ( aosp/1217729 )
  • Added lint rules to ensure that a foregroundServiceType is specified in the AndroidManifest.xml when using foregroundServiceType s in ForegroundInfo . ( 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 an api dependency on work-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 the AndroidManifest.xml when using on demand initialization. ( aosp/1167007 )
  • Added a lint warning when enqueue() is used for a PeriodicWorkRequest instead of enqueueUniquePeriodicWork() . ( aosp/1166032 )

API changes

  • ForegroundInfo now requires you to specify the notificationId to be used when using ListenableWorker.setForegroundAsync() . This is a breaking change. This allows you to run multiple long running Worker s in parallel. WorkManager also better manages lifetimes of the provided Notification 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 incorrect WorkContinuation 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 cancel WorkRequest s without having to register another component in the AndroidManifest.xml . This API makes it especially easy to cancel WorkRequest s from Notification 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() to ForegroundInfo.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() (or CoroutineWorker#setForeground() for Kotlin). ( aosp/1133636 )

API changes

  • The containsKey API in Data is renamed to hasKeyWithValueOfType . The corresponding extension method in the ktx 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 useful toString() representation. ( b/140945323 )
  • Data now has a better equals() method. It also supports deepEquals for Array 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 the setProgressAsync() API. Also added a corresponding suspend -ing setProgress API in CoroutineWorker and a setProgress in RxWorker which returns a Single<Void> . With these new APIs Workers can convey progress information via WorkInfo which has a corresponding getProgress API. ( b/79481554 )
  • Data has a containsKey() API which can be used to validate that input data to Worker s has keys with the expected type. ( b/117136838 )
  • Data can now be serialized using Data.toByteArray() and Data.fromByteArray() . Note that there are no versioning guarantees with Data 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 via Configuration.setInputMergerFactory . ( b/133273159 )

API changes

  • WorkManager will throw an instance of IllegalStateException if a WorkerFactory returns an instance of ListenableWorker which has been previously invoked. ( b/139554406 )
  • Documentation updates around ListenableFuture cancellation and the onStopped() callback in ListenableWorker . ( b/138413671 )

Исправления ошибок

  • The in-process Scheduler now ignores WorkRequest s with the idle constraint. These requests are now only picked up by JobScheduler when the device is actually idle . ( aosp/1089779 )
  • TestScheduler now correctly uses the specified Executor 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 using JobScheduler 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 your build.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:
    1. Disable the automatic initializer .
    2. Implement Configuration.Provider on your custom Application object.
    3. Change all references of WorkManager.getInstance() to WorkManager.getInstance(Context) . As part of this change, we have deprecated WorkManager.getInstance() . It is always safer to call the new WorkManager.getInstance(Context) replacement, even if you're not doing on-demand initialization.
  • PeriodicWorkRequest s now support initial delays. You can use the setInitialDelay method on PeriodicWorkRequest.Builder to set an initial delay. b/111404867
  • Added the ability to delegate to one or more registered WorkerFactory s using DelegatingWorkerFactory . b/131435993
  • Added the ability to customize the Executor used by WorkManager for all its internal book-keeping via Configuration.Builder.setTaskExecutor .
  • Added the ability to create unit testable Worker and ListenableWorker classes by using TestWorkerBuilder and TestListenableWorkerBuilder in the work-testing artifact.
    • Note that work-testing now pulls in Kotlin as a dependency and includes several Kotlin extensions by default.
  • 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 of Data 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 correct WorkerFactory when creating instances of ListenableWorker . 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 the setInitialDelay method on PeriodicWorkRequest.Builder to set an initial delay. b/111404867

  • Added the ability to delegate to one or more registered WorkerFactory s using DelegatingWorkerFactory . b/131435993

  • Added the ability to customize the Executor used by WorkManager for all its internal book-keeping via Configuration.Builder.setTaskExecutor .

  • Improved documentation around WorkRequest.keepResultsForAtLeast ( b/130638001 ), on-demand initialization, and PeriodicWorkRequest.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:
    1. Disable the automatic initializer .
    2. Implement Configuration.Provider on your custom Application object.
    3. Change all references of WorkManager.getInstance() to WorkManager.getInstance(Context) . As part of this change, we have deprecated WorkManager.getInstance() . It is always safer to call the new WorkManager.getInstance(Context) replacement, even if you're not doing on-demand initialization.
  • Added the ability to create unit testable Worker and ListenableWorker classes by using TestWorkerBuilder and TestListenableWorkerBuilder in the work-testing artifact.
    • Note that work-testing now pulls in Kotlin as a dependency, but also includes several Kotlin extensions by default.
  • 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 of Data objects.
  • Deprecated CoroutineWorker.coroutineContext . This field was incorrectly typed as a CoroutineDispatcher ; you should no longer need it as you can go to the desired coroutineContext yourself in the body of the suspending function.
  • RxWorker.createWork() and RxWorker.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

For information on using Kotlin extensions, see the KTX documentation .
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/124546316

  • Worker s that throw an unchecked Exception are now correctly marked as FAILED 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 in 1.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 dependency 1.1.1 instead of 1.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 of ListenableWorker . This prevents refactoring conflicts with Kotlin's top-level Result class. This is a breaking API change. b/120564418

Breaking API Changes

  • androidx.work.Result has been moved to be an inner class of ListenableWorker .

Версия 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 , introduces RxWorker . This is a ListenableWorker that expects a Single<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 into Result . Result is now a "sealed class" with three concrete implementations, which you can obtain via Result.success() (or Result.success(Data) ), Result.failure() (or Result.failure(Data) ), and Result.retry() . Your ListenableFuture s now result Result instead of Payload . Worker s don't have getter and setter methods for output Data . This is a breaking change.
  • Added Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) and Constraints.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() and ListenableFuture.await() Kotlin extension methods.
  • Renamed Operation.getException() to Operation.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 , and OneTimeWorkRequest to streamline the API. To fix any build problems, you can wrap your existing varargs with Arrays.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 existing combine 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 via observeForever 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 a WorkInfo with the CANCELLED State during ListenableWorker.onStopped() .
  • Treat null Result s as failures in ListenableWorker . 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 into Result . Result is now a "sealed class" with three concrete implementations, which you can obtain via Result.success() (or Result.success(Data) ), Result.failure() (or Result.failure(Data) ), and Result.retry() . Your ListenableFuture s now result Result instead of Payload . Worker s don't have getter and setter methods for output Data .
  • Added Operation.await() and ListenableFuture.await() Kotlin extension methods.
  • Renamed Operation.getException() to Operation.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 , and OneTimeWorkRequest to streamline the API. To fix any build problems, you can wrap your existing varargs with Arrays.asList(...) . We still include single-argument versions of each method.
  • Removed WorkContinuation.combine(OneTimeWorkRequest, *) variants. They were presenting a confusing API; the existing combine 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 new CoroutineWorker .
  • WorkStatus has been renamed to WorkInfo . All corresponding getStatus method variants have been renamed to the corresponding getWorkInfo variants. This is a breaking change.
  • ListenableWorker.onStopped() no longer accepts has a boolean argument representing if the WorkRequest was cancelled. WorkManager no longer makes this distinction. This is a breaking change.
  • androidx.work.test package has been renamed to androidx.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() and WorkerParameters.getTriggeredContentAuthorities() previously returned arrays. Now these methods return Collections. This is a breaking change.
  • ListenableWorker.onStartWork() is renamed to ListenableWorker.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() and Configuration.getMinJobSchedulerID() are renamed to Configuration.getMinJobSchedulerId() and Configuration.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 unique OneTimeWorkRequest s without having to create a WorkContinuation .
  • All variants of enqueue and cancel methods on WorkManager now return a new Operation type. This is a breaking change.
  • All variants of enqueue no longer accept varargs for WorkRequest s. This is a breaking change. Use Collections instead. You can use Arrays.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 an IllegalStateException . This is a breaking change.

Исправления ошибок

  • WorkRequest.Builder s in the work-runtime-ktx artifact now use ListenableWorker 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 to WorkInfo . All corresponding getStatus method variants have been renamed to the corresponding getWorkInfo variants.
  • ListenableWorker.onStopped() no longer accepts has a boolean argument representing if the WorkRequest was cancelled. WorkManager no longer makes this distinction.
  • androidx.work.test package has been renamed to androidx.work.testing package.
  • Setters on Constraints are no longer a part of the public API.
  • WorkerParameters.getTriggeredContentUris() and WorkerParameters.getTriggeredContentAuthorities() previously returned arrays. Now these methods return Collections.
  • ListenableWorker.onStartWork() is renamed to ListenableWorker.startWork() .
  • The constructor for WorkStatus is no longer a part of the public API.
  • Configuration.getMaxJobSchedulerID() and Configuration.getMinJobSchedulerID() are renamed to Configuration.getMinJobSchedulerId() and Configuration.getMaxJobSchedulerId() respectively.
  • All variants of enqueue and cancel methods on WorkManager now return a new Operation type.
  • All variants of enqueue no longer accept varargs for WorkRequest s.
  • Attempting to initialize WorkManager more than once per process will now result in an IllegalStateException .

Версия 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 default Worker constructor. This is a breaking API change.
  • Renamed NonBlockingWorker to ListenableWorker , 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 the ListenableFuture appropriately. Reference implementations of ListenableFuture s are provided in the Futures package in alpha02 (see below the WorkManager section).
    • Worker extends ListenableWorker and still operates as before, with an abstract Result doWork() method.
    • Shuffled some methods and members from Worker to ListenableWorker .
    • 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 implementation DefaultWorkerFactory have been merged into an abstract class called WorkerFactory . The implementation ensures that the default reflection-based behavior is called as a last-ditch effort for any user-created WorkerFactory instances. This is a breaking change.
  • Removed WorkManager.synchronous() and WorkContinuation.synchronous() and all related methods. Added ListenableFuture<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 return void ; it now returns a ListenableFuture<Void> . You can call ListenableFuture.addListener(Runnable, Executor) or ListenableFuture.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 the Future s contract.
    • To maintain parity with the synchronous getStatus* methods, we have provided ListenableFuture variants, and renamed the existing ones that returned LiveData to explicitly have "LiveData" as part of the name (for example, getStatusesByIdLiveData(UUID) ). This is a breaking API change.

Исправления ошибок

  • Fixed the known issue from alpha09 regarding duplicate androidx-annotations.pro files. You may remove the workaround from the previous release notes by deleting exclude '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 was REPLACE d. b/116253486 and b/116677275
  • WorkContinuation.combine() now accepts one or more WorkContinuation s instead of two or more. b/117266752

Breaking API Changes

  • Removed all previously deprecated methods and classes, notably the default Worker constructor.
  • The interface WorkerFactory and the concrete implementation DefaultWorkerFactory have been merged into an abstract class called WorkerFactory .
  • Removed WorkManager.synchronous() and WorkContinuation.synchronous() .
  • WorkManager.getStatus*() methods now return ListenableFuture s. WorkManager.getStatus*LiveData() return LiveData 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 underlying Worker . 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 a WorkerFactory as part of the WorkManager.Configuration . The fallback factory is DefaultWorkerFactory , which matches behavior of previous versions of WorkManager.
    • The default constructors for Worker and NonBlockingWorker are now marked as deprecated. Please use the new constructor ( Worker(Context, WorkerParameters) ) and call super(Context, WorkerParameters) ; future versions of WorkManager will remove the default constructor.
  • 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 of NonBlockingWorker .
  • Add ability to trigger timed work in TestDriver via TestDriver.setInitialDelayMet(UUID) and TestDriver.setPeriodDelayMet(UUID) . b/113360060

Breaking Changes

  • The default Worker and NonBlockingWorker 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 in JobScheduler 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 in ConstraintTracker . b/112272753
  • Changed return type annotations of Data.getBooleanArray(String) and Data.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) and Data.getIntArray(String) to @Nullable instead of @NonNull . b/112275229
  • Kotlin extensions: deprecated Map.toWorkData() and added a top-level workDataOf(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 using WorkRequest.Builder#build() . b/111408337
  • Enable the use of RescheduleReceiver only when there are WorkRequest 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 an IllegalStateException . This is a breaking API change.
  • Added a new API, Configuration.Builder.setMinimumLoggingLevel(int) , which can control WorkManager verbosity. By default, WorkManager logs Log.INFO and above.
  • Changed signature of Data.getString() so it no longer takes a default value (it is implicitly null ). This is a breaking API change.
  • Marked some methods needed only for internal usage as @hide . This includes the Constraints constructor, Data.toByteArray() , and Data.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 using JobScheduler . 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 given WorkRequest . 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 implicitly null ).
  • Marked some methods needed only for internal usage as @hide . This includes the Constraints constructor, Data.toByteArray() , and Data.fromByteArray(byte[]) .

Версия 1.0.0-альфа04

June 26, 2018

Исправления ошибок

  • PeriodicWorkRequest s are now correctly rescheduled when using the AlarmManager 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 version 1.1.1-rc1 .

Изменения API

  • Added getStatusesSync() , the synchronous version of WorkContinuation.getStatuses() .
  • Worker has the ability to distinguish between user-initiated cancellation and temporary os-requested stopping. Worker.isStopped() returns true if any kind of stop has been requested. Worker.isCancelled() returns true 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 to JobScheduler or AlarmManager . This helps prevent WorkManager from taking all your available JobScheduler slots.
  • Added Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) which helps define a range of JobScheduler job ids safe for WorkManager to use. b/79996760
  • Worker.getRunAttemptCount() returns the current run count for a given Worker . b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) allows you to enqueue a unique PeriodicWorkRequest s. b/79600647
  • WorkManager.cancelAllWork() cancels all Worker s. Libraries that depend on WorkManager can query when this method was called last by using WorkManager.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 the Worker . This allows the ability to remove WorkRequest s without tag s or when the id is not available. b/109572351

Breaking Changes

  • Renamed Worker.WorkerResult to Worker.Result .
  • Worker.onStopped now has an additional isCancelled parameter which is set to true when the Worker has explicitly been cancelled.

Версия 1.0.0-альфа02

May 24, 2018

Исправления ошибок

  • Fixed a NullPointerException on State.isFinished() . b/79550068
  • Fixed an issue which caused Worker s to be rescheduled on Application.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 in Data . b/79443878
  • Data.Builder.putAll() now returns an instance of the Builder . 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 a Worker has been stopped. Worker.onStopped() can be used to perform lightweight cleanup operations.
  • Worker.getTags() API returns a Set of tags associated with the Worker .
  • Added javax.time.Duration overloads for APIs which take a combination of duration and TimeUnit s. This is guarded by @RequiresApi(26) .
  • WorkManager extensions have moved from the androidx.work.ktx package to the androidx.work package. The old extensions are deprecated and will be removed in a future version.
  • Configuration.withExecutor() is deprecated. Use Configuration.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 .