WorkManager

WorkManager API 使您可以轻松调度必须可靠运行的可延迟异步任务。这些 API 允许您创建任务并将其交给 WorkManager,以便在满足工作约束条件时运行。
最新更新 稳定版 候选版本 Beta 版 Alpha 版
2024 年 9 月 4 日 2.9.1 - - 2.10.0-alpha03

声明依赖项

要添加对 WorkManager 的依赖项,您必须将 Google Maven 代码库 添加到您的项目中

在应用或模块的 build.gradle 文件中添加所需工件的依赖项

Groovy

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"
}

Kotlin

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-alpha03 版

2024 年 9 月 4 日

androidx.work:work-*:2.10.0-alpha03 已发布。2.10.0-alpha03 版本包含 这些提交

新功能

  • WorkManager 中的作业添加跟踪标签,这使得“adb shell dumpsys jobscheduler”更容易理解,因为它将包含正在执行的 Worker 的名称。跟踪部分也添加到 WorkManager 的关键区域周围。

API 更改

  • WorkManager 2.10.0 现在使用 SDK 35 编译。
  • 修复了类型为“短服务”和“数据同步”的前台工作者超时并导致 ANR 的问题,该问题发生在 WorkManager 未调用 stopSelf() 时。此修复程序仅适用于引入了前台服务类型的 API 34 和 35 的设备。(ca06b2b/364508145
  • 新的 WorkerParameters API,使在使用 WorkerFactory 时能够切换 Worker 绑定的远程进程成为可能。(Ibdc8aIe8a90I7373f

错误修复

  • 修复了 WorkManager 在工作的**前台类型**被撤销了 Android 14 的先决条件权限时,尝试重新启动长时间运行的工作者(即前台工作者)导致崩溃的问题。(b/333957914
  • 删除了手动概述对新平台 API 的访问,因为在使用 R8 和 AGP 7.3 或更高版本(例如 R8 版本 3.3)时,以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)时,这会通过 API 建模自动发生。建议未使用 AGP 的客户端更新到 D8 版本 8.1 或更高版本。有关更多详细信息,请参阅这篇文章。(Ia60e0b/345472586

版本 2.10.0-alpha02

2024 年 4 月 17 日

androidx.work:work-*:2.10.0-alpha02 已发布。版本 2.10.0-alpha02 包含这些提交

API 更改

  • 添加了通过 WorkManager 中可配置的 @RestrictTo Tracer 发出跟踪跨度的能力。(I17d7fb/260214125
  • 添加了 Configuration.workerCoroutineContext 用于控制 CoroutineWorker 执行的分派器。它有助于完全避免在 WorkManager 中使用 Dispatchers.Default。(Icd1b7
  • 为工作者添加自定义异常处理程序(Ib1b74b/261190695
  • OneTimeWorkRequest.BuilderPeriodicWorkRequest.Builder 现在可以使用 KClass 而不是 Class 进行构造:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()Ib55f6
  • WorkManager 类已迁移到 Kotlin。现在,返回 LiveDataListenableFutureFlow 的方法提供了正确的空值信息。如果客户端源代码中的空值假设不正确,则可能需要更改客户端的源代码。(If6757

版本 2.10.0-alpha01

2024 年 1 月 24 日

androidx.work:work-*:2.10.0-alpha01 已发布。版本 2.10.0-alpha01 包含这些提交。

新功能

  • 开发者可以通过 Constraints.setRequiredNetworkRequest 方法将 NetworkRequest 指定为工作者的约束条件。这使得能够更细粒度地控制此工作者应在哪个网络上运行。

API 更改

  • 添加了将 NetworkRequest 指定为约束条件的功能。(Id98a1b/280634452

版本 2.9

版本 2.9.1

2024 年 8 月 7 日

androidx.work:work-*:2.9.1 已发布。版本 2.9.1 包含这些提交

错误修复

版本 2.9.0

2023 年 11 月 29 日

androidx.work:work-*:2.9.0 已发布。版本 2.9.0 包含这些提交。

自 2.8.0 以来重要的更改

  • 通过 Flow 进行可观察性。现在,工作者的进度可以通过 WorkManager.getWorkInfosFlow 和类似方法通过 Flow 而不是 LiveData 进行观察。
  • 现在,WorkManager 提供了有关先前停止工作者的原因的提示。可以通过工作者本身的 getStopReason() 方法或通过 WorkInfogetStopReason() 方法进行查询。
  • 通过 setNextScheduleTimeOverride 精确调度周期性工作者。这允许动态计算下一个周期性工作的计划时间,可用于实现高级功能,例如自适应刷新时间、自定义重试行为或在用户每天早上醒来之前运行新闻提要工作者,而不会出现漂移。这些技术应与 ExistingPeriodicWorkPolicy.UPDATE 一起使用,以避免在调度下一个工作者时取消当前正在运行的工作者。
  • 使用与生产环境匹配的线程进行 WorkManager 测试。可以在 initializeTestWorkManager 中使用 ExecutorsMode.PRESERVE_EXECUTORS 来保留在 Configuration 中设置的执行器并使用真正的主线程。
  • 诸如 CoroutineWorker 之类的协程 API 已从附加工件 work-runtime-ktx 移动到主工件 work-runtime。work-runtime-ktx 现在为空。

API 更改

  • stopReason 添加到 WorkInfo 中。它使工作者运行后 stopReason 可用。这可能有助于以可用的方式报告 stopReason,因为一旦工作者停止,应用程序本身可能会很快被杀死。(I21386
  • 允许通过配置设置 Clock 并用于驱动工作者测试的执行排序。(Ic586e
  • 添加了 getStopReason() 方法到 ListenableWorker,该方法提供了工作者停止的原因提示。(I07060
  • 添加了 WorkManagerTestInitHelper#closeWorkDatabase() 以避免 Closeguard 关于泄漏资源的警告。(Ia8d49
  • WorkInfo 的构造函数现在是公有的,这在测试中很有用。(Ia00b6b/209145335
  • work-runtime-ktx 现在为空,CoroutineWorker 和其他 Kotlin 特定实用程序现在可在主 work-runtime 工件中使用。(I71a9a
  • 添加了 setNextScheduleTimeOverride 方法,允许精确设置周期性工作计划(I3b4da
  • 添加了 getNextScheduleTimeMillis 以获取计划运行时间信息,并将其添加到 WorkInfo 中。(I797e4
  • 将初始延迟和周期性信息添加到 WorkInfo 中。(I52f2f
  • 添加了通过 getWorkInfosByTagFlowgetWorkInfoByIdFlowgetWorkInfosForUniqueWorkFlowgetWorkInfosFlow 方法通过 Flow 观察工作者的功能(If122a
  • Constraints 的构造函数和属性添加了缺少的 @RequiresApi(...) 注释。它们现在与 Constraints.Builder 中设置程序上的相应注释保持一致,这些注释从早期版本的 WorkManager 中存在。(I6d7d2
  • WorkManager 现在对内容 URI 工作者有单独的限制,以在 JobScheduler 中为它们提供保证的插槽,以防止在高负载下丢失内容更新。可以通过 Configuration.Builder.setContentUriTriggerWorkersLimit 配置此限制。(Ic128f
  • 将约束条件添加到 WorkInfo 中。(I162c0

版本 2.9.0-rc01

2023 年 10 月 18 日

androidx.work:work-*:2.9.0-rc01 已发布。版本 2.9.0-rc01 包含这些提交。

  • 自上次测试版发布以来没有更改

版本 2.9.0-beta01

2023 年 9 月 6 日

androidx.work:work-*:2.9.0-beta01 已发布。版本 2.9.0-beta01 包含这些提交。

API 更改

版本 2.9.0-alpha02

2023 年 7 月 26 日

androidx.work:work-*:2.9.0-alpha02 已发布。版本 2.9.0-alpha02 包含这些提交。

新功能

  • 现在,WorkManager 提供了有关先前停止工作者的原因的提示。可以通过工作者本身的 getStopReason() 方法或通过 WorkInfogetStopReason() 方法进行查询。

API 更改

  • stopReason 添加到 WorkInfo 中。它使工作者运行后 stopReason 可用。这可能有助于以可用的方式报告 stopReason,因为一旦工作者停止,应用程序本身可能会很快被杀死。(I21386
  • 允许通过配置设置 Clock 并用于驱动工作者测试的执行排序。(Ic586e
  • 添加了 getStopReason() 方法到 ListenableWorker,该方法提供了工作者停止的原因提示。(I07060
  • 添加了 WorkManagerTestInitHelper#closeWorkDatabase() 以避免 Closeguard 关于泄漏资源的警告。(Ia8d49

错误修复

  • 添加了使用 TestDriver 跳过 overrideNextScheduleTime 的功能,并修复了可测试性问题。(Ic2905

版本 2.9.0-alpha01

2023 年 6 月 7 日

androidx.work:work-*:2.9.0-alpha01 已发布。版本 2.9.0-alpha01 包含这些提交。

新功能

  • 通过 Flow 进行可观察性。现在,工作者的进度可以通过 WorkManager.getWorkInfosFlow 和类似方法通过 Flow 而不是 LiveData 进行观察。
  • 通过 setNextScheduleTimeOverride 精确调度周期性工作者。这允许动态计算下一个周期性工作的计划时间,可用于实现高级功能,例如自适应刷新时间、自定义重试行为或在用户每天早上醒来之前运行新闻提要工作者,而不会出现漂移。这些技术应与 ExistingPeriodicWorkPolicy.UPDATE 一起使用,以避免在调度下一个工作者时取消当前正在运行的工作者。

  • 在测试时,WorkManager 的线程处理方式与生产环境一致。可以使用 ExecutorsMode.PRESERVE_EXECUTORS 来保留在 Configuration 中设置的执行器,并使用真实的 UI 线程。
  • 协程 API(例如 CoroutineWorker)已从附加构件 work-runtime-ktx 移动到主构件 work-runtime。现在 work-runtime-ktx 为空。

API 更改

  • WorkInfo 的构造函数现在是公开的,这在测试中很有用。(Ia00b6b/209145335
  • work-runtime-ktx 现在为空,CoroutineWorker 和其他 Kotlin 特定的实用程序现在可在主 work-runtime 构件中使用。(I71a9a
  • 添加了 setNextScheduleTimeOverride 方法,允许精确设置周期性工作计划(I3b4da
  • getEarliestRunTimeMillis 重命名为 getNextScheduleTimeMillis。(I2bd7a
  • 将下次计划运行时间信息添加到 WorkInfo 中。(I797e4
  • 将初始延迟和周期性信息添加到 WorkInfo 中。(I52f2f
  • 添加了通过 getWorkInfosByTagFlowgetWorkInfoByIdFlowgetWorkInfosForUniqueWorkFlowgetWorkInfosFlow 方法通过 Flow 观察工作者的功能(If122a
  • 向 Constraints 的构造函数和属性添加了缺少的 @RequiresApi(...) 注释。它们现在与 Constraints.Builder 中自早期版本的 WorkManager 以来存在的 setter 上的相应注释保持一致。(I6d7d2
  • WorkManager 现在对内容 URI 工作器有单独的限制,以便在 JobScheduler 中为它们提供保证的插槽,以防止在高负载下错过内容更新。可以通过 Configuration.Builder.setContentUriTriggerWorkersLimit 配置限制。(Ic128f
  • 将约束条件添加到 WorkInfo 中。(I162c0

版本 2.8

版本 2.8.1

2023 年 3 月 22 日

发布了 androidx.work:work-*:2.8.1版本 2.8.1 包含以下提交。

错误修复

  • 修复了 RescheduleReceiver 中的 ANR 问题,该问题以前没有正确处理两个同时广播。(b/236906724

版本 2.8.0

2023 年 2 月 8 日

发布了 androidx.work:work-*:2.8.0版本 2.8.0 包含以下提交。

自 2.7.0 以来重要的更改

新功能

API 更改

  • 添加了 WorkManager.updateWork 以更新工作并保留其原始入队时间和链式调用。(I9a248b/219446409
  • 添加了 ExistingPeriodicWorkPolicy.UPDATE。此策略允许通过名称更新周期性工作。它类似于现有的 REPLACE,但侵入性较小:如果工作器当前正在运行,它不会取消工作器,并且它保留入队时间 - 初始延迟和周期是从原始入队时间计算的,而不是从更新时间计算的。REPLACE 已弃用,以减少非常相似命名的 REPLACEUPDATE 之间的混淆。如果您仍然希望保留 REPLACE 的先前语义,可以使用新添加的 CANCEL_AND_REENQUEUE,它与 REPLACE 相同。(I985edb/219446409
  • 添加了通过 setSchedulingExceptionHandler 提供 Consumer<Throwable> 来拦截调度异常的功能。
  • 添加了通过 setInitializationExceptionHandler 提供 Consumer<Throwable> 来确定在尝试初始化 WorkManager 时是否存在问题的功能。
  • OneTimeWorkRequestPeriodicWorkRequest 的内联帮助程序从 androidx.work:work-runtime-ktx 移动到 androidx.work:work-runtime。(I0010fb/209145335
  • 添加了帮助程序方法 WorkQuery.fromIdsWorkQuery.fromStatesWorkQuery.fromUniqueWorkNamesWorkQuery.fromTags 以直接创建 WorkQuery。(b/199919736)(If48f2b/199919736
  • Worker 添加了 getForegroundInfo。(Ic1ead
  • 现在,RxJava 2 和 RxJava 3 的 RxWorker 都具有 setForeground,它返回 Completable,可用于代替返回 ListenableFuturesetForegroundInfoAsync
  • RxJava 2 和 RxJava 3 的 RxWorker 都具有 getForegroundInfo,它返回 Single,可用于代替返回 ListenableFuturegetForegroundInfoAsync。(b/203851459
  • 现在可以直接构造约束,而不是使用 Constraints.Builder,这对于 Kotlin 用户来说很方便。(Idc390b/137568653
  • 添加了检查 WorkManager 是否已初始化的功能。此外,还为库开发人员添加了一个新的 getConfiguration() API,以获取初始化 WorkManager 时使用的配置。(I6eff3b/212300336

错误修复

  • 修复了贪婪调度程序的一个问题,该问题会阻止工作器在负载过重时立即运行。(I9686bb/248111307
  • 在 API 中添加了 @RequiresPermission,这些 API 要求在 SDK 33 及更高版本上授予 POST_NOTIFICATIONS 权限。(Ie542eb/238790278
  • 在使用 suspendCancellableCoroutine 时,将 CoroutineScope 中的取消传播到 ListenableFuture

版本 2.8.0-rc01

2022 年 12 月 7 日

发布了 androidx.work:work-*:2.8.0-rc01版本 2.8.0-rc01 包含以下提交。

新功能

  • 此版本没有新增功能。这主要是一个版本更新。

版本 2.8.0-beta02

2022 年 11 月 9 日

发布了 androidx.work:work-*:2.8.0-beta02版本 2.8.0-beta02 包含以下提交。

错误修复

  • 修复了 WorkInfo 中的 equals 方法,该方法以前没有考虑新的生成信息。(4977cc

版本 2.8.0-beta01

2022 年 10 月 5 日

发布了 androidx.work:work-*:2.8.0-beta01版本 2.8.0-beta01 包含以下提交。

错误修复

  • 修复了贪婪调度程序的一个问题,该问题会阻止工作器在负载过重时立即运行。(I9686bb/248111307

版本 2.8.0-alpha04

2022 年 9 月 7 日

发布了 androidx.work:work-*:2.8.0-alpha04版本 2.8.0-alpha04 包含以下提交。

API 更改

  • 添加了 WorkerInfo.getGeneration()WorkerParameters.getGeneration(),它们返回工作器的生成。如果工作器通过 WorkManager.updateWork 或使用 ExistingPeriodicWorkPolicy.UPDATEWorkManager.enqueueUniquePeriodicWork 更新,则工作器具有多个生成。请注意,如果在工作器执行期间发生更新,则如果工作器当前正在运行,则此方法可能会返回比当前正在运行的工作器更新的生成。(I665c5b/219446409)(I128a9b/219446409
  • 添加了 InitializationExceptionHandler,这是一种异常处理程序,可用于确定在尝试初始化 WorkManager 时是否存在问题。(I061de

版本 2.8.0-alpha03

2022 年 8 月 10 日

发布了 androidx.work:work-*:2.8.0-alpha03版本 2.8.0-alpha03 包含以下提交。

新功能

  • 添加了一种以非侵入方式更新 WorkRequests 的功能,保留原始入队时间、链式调用等。有关详细信息,请参阅 WorkManager.updateWorkExistingPeriodicWorkPolicy.UPDATE

API 更改

  • 添加了 WorkManager.updateWork 以更新工作并保留其原始入队时间和链式调用。(I9a248b/219446409
  • 添加了 ExistingPeriodicWorkPolicy.UPDATE。此策略允许通过名称更新周期性工作。它类似于现有的 REPLACE,但侵入性较小:如果工作器当前正在运行,它不会取消工作器,并且它保留入队时间 - 初始延迟和周期是从原始入队时间计算的,而不是从更新时间计算的。REPLACE 已弃用,以减少非常相似命名的 REPLACEUPDATE 之间的混淆。如果您仍然希望保留 REPLACE 的先前语义,可以使用新添加的 CANCEL_AND_REENQUEUE,它与 REPLACE 相同。(I985edb/219446409

  • 通过定义一个SchedulingExceptionHandler,可以拦截调度异常。 (I033eb)
  • OneTimeWorkRequestPeriodicWorkRequest 的内联帮助程序从 androidx.work:work-runtime-ktx 移动到 androidx.work:work-runtime。(I0010fb/209145335

错误修复

  • 在 SDK 33 及以上版本中,为需要授予 POST_NOTIFICATIONS 权限的 API 添加了@RequiresPermission。 (Ie542e, b/238790278)

版本 2.8.0-alpha02

2022年4月6日

androidx.work:work-*:2.8.0-alpha02 已发布。 版本 2.8.0-alpha02 包含以下提交。

API 更改

  • 现在可以直接构造约束,而不是使用 Builder,这对于 Kotlin 用户来说很方便。 (Idc390, b/137568653)
  • 添加了检查WorkManager是否已初始化的功能。此外,还为库开发者添加了一个新的getConfiguration() API,用于获取WorkManager初始化时的配置。 (I6eff3, b/212300336)

版本 2.8.0-alpha01

2022年1月12日

androidx.work:work-*:2.8.0-alpha01 已发布。 版本 2.8.0-alpha01 包含以下提交。

API 更改

  • 添加了辅助方法WorkQuery.fromStatesWorkQuery.fromUniqueWorkNamesWorkQuery.fromTags,用于直接创建 WorkQuery。 (If48f2, b/199919736)
  • 为未来的 SDK 添加了实验性的 BuildCompat 方法 (Iafd82, b/207528937)
  • Worker添加了getForegroundInfo。 (Ic1ead)
  • 添加了辅助方法WorkQuery.fromIds,用于直接从 ID 创建 WorkQuery。 (Ie5bdf, b/199919736)
  • RxWorker 现在有setForeground返回Completable,可以用来代替返回ListenableFuturesetForegroundInfoAsync。 (I85156)
  • RxJava 2 的 RxWorker 现在有getForegroundInfo返回Single,可以用来代替返回ListenableFuturegetForegroundInfoAsync。 (I21c91, b/203851459)
  • RxJava 3 的 RxWorker 现在有getForegroundInfo返回Single,可以用来代替返回ListenableFuturegetForegroundInfoAsync。 (I1ca8a)
  • RxWorker 现在有setForeground返回Completable,可以用来代替返回ListenableFuturesetForegroundInfoAsync。 (I992a3, b/203851459)

错误修复

  • 在使用suspendCancellableCoroutine时,将CoroutineScope中的取消传播到ListenableFuture。 (I77e63)

版本 2.7

版本 2.7.1

2021年11月17日

androidx.work:work-*:2.7.1 已发布。 版本 2.7.1 包含以下提交。

错误修复

  • 在使用suspendCancellableCoroutine时,CoroutineScope中的取消将传播到ListenableFuture。 (I77e63)
  • 当延迟工作请求被标记为加急时,会立即抛出一个异常。 bef1762

版本 2.7.0

2021年10月13日

androidx.work:work-*:2.7.0 已发布。 版本 2.7.0 包含以下提交。

自 2.6.0 以来重要更改

  • WorkManager 引入了一个新的WorkRequest.Builder.setExpedited(...) API,以帮助解决 Android 12 中的前台服务限制。

  • 当使用setExpedited(...)时,WorkManager 从 Android 12 开始委托给加急作业,而在 Android 的早期版本中,通过委托给前台服务来提供向后兼容性。

版本 2.7.0-rc01

2021年9月29日

androidx.work:work-*:2.7.0-rc01 已发布。 版本 2.7.0-rc01 包含以下提交。

此版本与androidx.work:work-*:2.7.0-beta01相同。

版本 2.7.0-beta01

2021年9月1日

androidx.work:work-*:2.7.0-beta01 已发布。 版本 2.7.0-beta01 包含以下提交。

新功能

  • 减少初始化 WorkManager 时的多进程 SQLite 竞争。

API 更改

  • 由于 Android 12 (S) 的底层平台 API 稳定,因此删除了@ExperimentalExpeditedWork API。 (aosp/1792806)

错误修复

  • 为未实现getForegroundInfoAsync()的加急工作程序提供更好的错误消息。 (aosp/1809376)

版本 2.7.0-alpha05

2021年7月21日

androidx.work:work-*:2.7.0-alpha05 已发布。 版本 2.7.0-alpha05 包含以下提交。

此版本还包含来自WorkManager 2.6.0-beta02版本的错误修复。

版本 2.7.0-alpha04

2021年6月2日

androidx.work:work-*:2.7.0-alpha04 已发布。

此版本还包含来自2.6.0-beta01版本的更改。

API 更改

  • ListenableWorker.setForegroundAsync()不再弃用。
  • 我们建议尽可能使用WorkRequest.Builder.setExpedited(...) API。为了更好地支持应用不受前台服务限制的情况,开发者可以使用ListenableWorker.setForegroundAsync() API。
  • 如果在应用受前台服务限制的情况下调用ListenableWorker.setForegroundAsync(),则会抛出ForegroundServiceStartNotAllowedException

错误修复

  • 当重新安排加急作业时,它们不再是加急作业。它们变成常规作业。

版本 2.7.0-alpha03

2021年4月21日

androidx.work:work-*:2.7.0-alpha03 已发布。 版本 2.7.0-alpha03 包含以下提交。

新功能

API 更改

版本 2.7.0-alpha02

2021年3月10日

androidx.work:work-*:2.7.0-alpha02 已发布。 版本 2.7.0-alpha02 包含以下提交。

错误修复

  • 使PendingIntent的可变性明确,以修复面向 Android 12 时发生的崩溃。 (b/180884673)

版本 2.7.0-alpha01

2021年2月18日

androidx.work:work-*:2.7.0-alpha01 已发布。 版本 2.7.0-alpha01 包含以下提交。

新功能

  • WorkManager 引入了一个新的WorkRequest.Builder.setExpedited(...) API,以考虑 Android 12 中的前台服务限制

    应用程序在后台时不再能够启动前台服务。因此,为了更好地支持以前绑定到前台服务生命周期的长时间运行工作,应用程序可以将WorkRequest标记为加急

    此 API 替换了现在已弃用setForegroundAsync(...) / setForeground(...) API。

    当使用setExpedited(...)时,WorkManager 从 Android 12 开始委托给JobScheduler中的加急作业,而在 Android 的早期版本中,通过委托给前台服务来提供向后兼容性。

API 更改

  • 添加对加急WorkRequest的支持。

版本 2.6.0

版本 2.6.0

2021年9月1日

androidx.work:work-*:2.6.0 已发布。 版本 2.6.0 包含以下提交。

自 2.5.0 版本以来的重要更改

  • WorkManager 现在使用 androidx.startup 初始化 WorkManager。如果您之前使用 tools:node="remove" 删除了用于初始化 WorkManager 的 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.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" />
    
  • 添加了对可在任何进程中运行的 Worker 的支持。(Iaf200

  • 添加了一个 RemoteCoroutineWorker,它是 RemoteListenableWorker 的一个实现,可以绑定到远程进程。(I30578

版本 2.6.0-rc01

2021 年 8 月 4 日

androidx.work:work-*:2.6.0-rc01 已发布。版本 2.6.0-rc01 包含以下提交。

此版本与 androidx.work:work-*:2.6.0-beta02 相同。

版本 2.6.0-beta02

2021年7月21日

androidx.work:work-*:2.6.0-beta02 已发布。版本 2.6.0-beta02 包含以下提交。

错误修复

  • RemoteWorkManager 现在可以正确地从 RemoteWorkManagerService 解绑,从而允许 RemoteWorkManagerService 正确清理。aosp/1730694
  • RemoteListenableWorker 现在可以正确地从 RemoteWorkerService 解绑,从而允许 RemoteWorkerService 正确清理。aosp/1743817
  • ForceStopRunnable 现在只在主应用程序进程中运行。这是一个优化,避免了使用多个进程的应用程序的资源竞争。aosp/1749180aosp/1761729

版本 2.6.0-beta01

2021年6月2日

androidx.work:work-*:2.6.0-beta01 已发布。版本 2.6.0-beta01 包含以下提交。

此版本包含一些小的文档改进。此版本与 2.6.0-alpha02 几乎相同。

版本 2.6.0-alpha02

2021年4月21日

androidx.work:work-*:2.6.0-alpha02 已发布。版本 2.6.0-alpha02 包含以下提交。

新功能

  • 添加了对可在任何进程中运行的 Worker 的支持。(Iaf200

  • 添加了一个 RemoteCoroutineWorker,它是 RemoteListenableWorker 的一个实现,可以绑定到远程进程。(I30578

API 更改

  • 添加了对 TEMPORARILY_UNMETERED 网络约束的支持。(I08d5e
  • 多进程 Worker 对 setProgressAsync() 的支持。(Ib6d08
  • 使 WorkManagerInitializer 公开,以便其他 androidx.startup.Initializer 可以将其用作依赖项。(I5ab11

版本 2.6.0-alpha01

2021 年 3 月 24 日

androidx.work:work-*:2.6.0-alpha01 已发布。版本 2.6.0-alpha01 包含以下提交。

新功能

  • WorkManager 现在使用 androidx.startup 初始化 WorkManager。以前,这是由 androidx.work.impl.WorkManagerInitializer 完成的。(aosp/1608813

    如果您之前使用 tools:node="remove" 删除了用于初始化进程生命周期的 ContentProvider,则需要执行以下操作。

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (或)

     <!-- If you want to disable android.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

API 更改

  • 添加了一个 Result.getOutputData() API,它返回 ListenableWorker 的 outputData。(Ie51e3

错误修复

  • 添加了一个针对 OEM 错误的解决方法,该错误会导致在使用 AlarmManager API 时抛出 SecurityException。(aosp/1587518

版本 2.5.0

版本 2.5.0

2021 年 1 月 27 日

androidx.work:work-*:2.5.0 已发布。版本 2.5.0 包含以下提交。

自 2.4.0 版本以来的重大更改

  • 一个新的 :work:work-multiprocess 工件,适用于使用多个进程的应用。这通过将工作请求调度统一到单个进程来提高性能。
  • 有时,ActivityManager 无法实例化 JobService 实例以启动作业。由于平台错误,这会导致底层作业被静默删除。WorkManager 现在确保在 Application 初始化时通过协调作业为每个 WorkRequest 提供备份作业。这大大提高了作业执行的可靠性。(b/172475041aosp/1489577
  • WorkManager 通过减少 WorkRequest 完成后跟踪其缓冲持续时间来限制数据库增长。以前,持续时间为 7 天。它已减少到 1 天 + keepResultsForAtLeast 持续时间。(aosp/1419708
  • TestListenableWorkerBuilder 现在支持扩展 ListenableWorker 的具体化类,以简化测试。(aosp/1443299b/169787349
  • 使用 Android Studio Arctic Fox 时,现在可以使用 WorkManager 检查器

版本 2.5.0-rc01

2021 年 1 月 13 日

androidx.work:work-*:2.5.0-rc01 已发布。版本 2.5.0-rc01 包含以下提交。

错误修复

  • 修复了在使用基于 WorkQuery 的 API 时,实体更新后 getWorkInfosLiveData 未正确失效的问题。(aosp/1540566b/173769028
  • 修复了在某些罕见情况下数据库事务未被标记为成功的问题。这会导致某些摩托罗拉设备出现问题。(aosp/1535368b/175944460
  • 修复了一个错误,该错误在尝试从已死进程解绑时忽略了 NoSuchElementException。(aosp/1530589
  • 改进 ConstraintTrackingWorker,使其仅在 ListenableWorker 未被停止时才停止它。(aosp/1496844b/172946965
  • 更新 androidx.work 库以针对 Java 8(Ibd2f2

版本 2.5.0-beta02

2020 年 12 月 2 日

androidx.work:work-*:2.5.0-beta02 已发布。版本 2.5.0-beta02 包含以下提交。

错误修复

  • 修复了 androidx.work:work-multiprocess 中的一个错误,该错误导致 WorkManager 在尝试绑定到指定进程时意外阻塞了调用线程。(aosp/1475538
  • 修复了 PeriodicWorkRequest 未被正确协调的问题。(b/172475041aosp/1489577
  • 添加了一个针对平台错误的解决方法,该错误发生在使用 setForeground* API 时停止前台服务时。(b/170924044aosp/1489901

版本 2.5.0-beta01

2020 年 10 月 28 日

androidx.work:work-*:2.5.0-beta01 已发布。版本 2.5.0-beta01 包含以下提交。

新功能

  • WorkManager 自动限制进程内调度程序可以获取的 WorkRequest 数量。请求仍按 FIFO 顺序执行。(aosp/1455228
  • WorkManager 尝试在应用程序的数据存储处于错误状态时恢复。(aosp/1463103

错误修复

  • ListenableWorker 被中断时,立即将其标记为 ENQUEUED,以便随后可以重新安排。(aosp/1455618b/170273988

版本 2.5.0-alpha03

2020 年 10 月 14 日

androidx.work:work-*:2.5.0-alpha03 已发布。版本 2.5.0-alpha03 包含以下提交。

API 更改

  • TestListenableWorkerBuilderTestWorkerBuilder 不使用原始类型。(I883adb/169787349

错误修复

  • 使用 ApplicationInfo 确定默认应用程序进程的名称。(b/168716641aosp/1429950
  • 修复了 RemoteWorkManagerRemoteWorkContinuation 的可见性规则。这些 API 不再标记为 @Restricted。(aosp/1432091
  • 修复了 :work:work-multiprocess 的 ProGuard 规则。(aosp/1432091
  • 改进了绑定到前台服务的长时间运行工作的通知生命周期。(b/168502234aosp/1431331

版本 2.5.0-alpha02

2020 年 9 月 16 日

已发布 androidx.work:work-*:2.5.0-alpha02版本 2.5.0-alpha02 包含以下提交。

新功能

  • 向 WorkQuery 添加一个 API,以便能够使用 id 查询 WorkInfo。(aosp/1412372b/157335295
  • WorkManager 通过一个新的工件 (androidx.work:work-multiprocess:*) 更好地支持使用多个进程的应用。这个新的工件有助于解决大型应用遇到的几个问题,包括
    • WorkManager 通常需要在每个应用进程中初始化。这不太好,因为会增加 SQLite 争用,进而导致其他问题。WorkManager 现在有新的 API 可用于使用 Configuration#setDefaultProcessName(processName) 指定一个应用进程。processName 是一个完全限定的进程名称,类似于 packageName:processName(例如 com.example:remote)。
    • 一组新的 API:RemoteWorkManagerRemoteWorkContinuation 用于 enqueuecancelquery 工作请求。这些 API包括 LiveData 变体,以避免跨多个进程的 SQLite 争用。对 enqueuecancelquery 的所有调用都将转发到使用 AIDL 的应用进程,并返回一个流畅的 ListenableFuture。(aosp/1392657aosp/1411210aosp/1412215aosp/1417713

API 更改

  • WorkManager 现在更积极地修剪没有未完成依赖项的已完成 WorkRequest。缓冲持续时间从 7 天更改为 1 天。(aosp/1419708

错误修复

  • WorkManager 现在会主动协调作业,因此当 WorkManager 初始化时,WorkRequestJobScheduler 作业将保持同步。(aosp/1412794b/166292069

版本 2.5.0-alpha01

2020 年 8 月 19 日

已发布 androidx.work:work-*:2.5.0-alpha01版本 2.5.0-alpha01 包含以下提交。

新功能

  • 对内部 API 的更改,使我们能够在未来提供更好的 WorkManager 工具。敬请期待更多更新。

错误修复

  • 在某些设备上跟踪网络状态时处理 SecurityException。(aosp/1396969

外部贡献

版本 2.4.0

版本 2.4.0

2020 年 7 月 22 日

已发布 androidx.work:work-*:2.4.0版本 2.4.0 包含以下提交。

自 2.3.0 以来的主要更改

  • WorkManager 的进程内调度程序现在功能更强大。以前,进程内 Scheduler 仅考虑执行未延迟且满足其约束条件的工作。现在,进程内调度程序会跟踪将来可能执行的 WorkRequest,包括 PeriodicWorkRequests。进程内 Scheduler 也不再观察调度限制(但仍然受限于 WorkManager 使用的 Executor 的大小)。这意味着当应用处于前台时,应用现在可以执行更多 WorkRequest。为了管理在前台执行延迟工作,WorkManager 还引入了新的可配置 RunnableScheduler。(aosp/1185778
  • WorkManager 现在支持 RxJava 3。要使用 RxJava 3,您应该包含以下依赖项:implementation "androidx.work:work-rxjava3:2.4.0"。(aosp/1277904
  • 添加了使用 WorkQuery 查询 WorkInfo 的功能。当开发者希望通过多个属性的组合查询 WorkInfo 时,这很有用。有关更多信息,请查看 WorkQuery.Builder.fromStates(...)WorkQuery.Builder. fromTags(...)WorkQuery.Builder.fromUniqueWorkNames(...)。(aosp/1253230b/143847546
  • 添加了使用以下方法从 WorkManager 请求诊断信息的功能

    adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
    

    这提供了许多有用的信息,包括

    • 过去 24 小时内完成的 WorkRequests。
    • 当前正在运行的 WorkRequests。
    • 已计划的 WorkRequests。(aosp/1235501
  • 添加了 ExistingWorkPolicy.APPEND_OR_REPLACE,它类似于 APPEND,但会替换具有已取消或失败先决条件的链。(b/134613984aosp/1199640

  • 提供了添加自定义 RunnableScheduler 以跟踪将来需要执行的 WorkRequests 的功能。进程内调度程序使用此功能。(aosp/1203944

  • 添加了对动态添加工厂以委托的功能的支持,在使用 DelegatingWorkerFactory 时。(b/156289105aosp/1309745

  • 使 BATTERY_NOT_LOW 约束的跟踪更接近平台。(aosp/1312583

  • 进程内调度程序现在使用更好的 API 来确定进程的名称。这对于更好地支持使用多进程的应用很有用。(aosp/1324732

  • 新的 Lint 规则强制执行

    • 在使用 setForegroundAsync() API 时使用正确的 foregroundServiceType。(b/147873061aosp/1215915
    • 指定在直接使用 JobService API 时 WorkManager 应使用的 JobScheduler id。aosp/1223567
    • 添加了一条新的 lint 规则,确保在使用默认 WorkerFactory 时,ListenableWorker 实现现在是 public 的。(aosp/1291262
  • ListenableWorker 完成之前未完成的 setForegroundAsync() 调用现在将通过返回的 ListenableFuture 上的 IllegalStateException 发出信号。(aosp/1262743

  • 修复了一个错误,即在中断前台 Worker 后,ForegroundService 未停止。(b/155579898aosp/1302153

  • 修复了一个错误,即 WorkManager 尝试执行绑定到前台服务的 Worker 的多个实例 (b/156310133aosp/1309853)

版本 2.4.0-rc01

2020 年 6 月 24 日

已发布 androidx.work:work-*:2.4.0-rc01版本 2.4.0-rc01 包含以下提交。

错误修复

  • 进程内调度程序现在使用更好的 API 来确定进程的名称。这对于更好地支持使用多进程的应用很有用。(aosp/1324732

版本 2.4.0-beta01

2020 年 5 月 20 日

已发布 androidx.work:work-gcm:2.4.0-beta01androidx.work:work-runtime:2.4.0-beta01androidx.work:work-runtime-ktx:2.4.0-beta01androidx.work:work-rxjava2:2.4.0-beta01androidx.work:work-testing:2.4.0-beta01版本 2.4.0-beta01 包含以下提交。

错误修复

  • 修复了一个错误,即在中断前台 Worker 后,ForegroundService 未停止。(b/155579898aosp/1302153
  • 修复了一个错误,即 WorkManager 尝试执行绑定到前台服务的 Worker 的多个实例 (b/156310133aosp/1309853)
  • 添加了对动态添加工厂以委托的功能的支持,在使用 DelegatingWorkerFactory 时。(b/156289105aosp/1309745
  • 使 BATTERY_NOT_LOW 约束的跟踪更接近平台。(aosp/1312583

版本 2.4.0-alpha03

2020 年 4 月 29 日

已发布 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 规则,确保在使用默认 WorkerFactory 时,ListenableWorker 实现现在是 public 的。(aosp/1291262

API 更改

  • ListenableWorker 完成执行后调用 setProgressAsync() 现在将通过 ListenableFuture 发出 Exception 信号。(aosp/1285494
  • WorkQuery.Builder 现在标记为 final。(aosp/1275037
  • WorkQuery.Builder 工厂方法 withStateswithTagswithUniqueWorkNames 已分别重命名为 fromStatesfromTagsfromUniqueWorkNames。(aosp/1280287

错误修复

版本 2.4.0-alpha02

2020 年 4 月 1 日

已发布 androidx.work:work-*:2.4.0-alpha02版本 2.4.0-alpha02 包含以下提交。

新功能

  • 添加了一条新的 Lint 规则,当 WorkRequest 同时需要 Constraints.setRequiresCharging(...)Constraints.setRequiresDeviceIdle(...) 时发出警告。某些设备永远不会同时处于充电和空闲状态。因此,此类请求的运行频率低于预期。(aosp/1253840

API 更改

  • 添加了使用 WorkQuery 查询 WorkInfo 的功能。当开发者希望通过多个属性组合查询 WorkInfo 时,此功能非常有用。更多信息请查看 WorkQuery.Builder withStates(...)WorkQuery.Builder withTags(...)WorkQuery.Builder withUniqueWorkNames(...)。(aosp/1253230b/143847546

  • ListenableWorker 完成之前未完成的 setForegroundAsync() 调用现在将通过返回的 ListenableFuture 上的 IllegalStateException 发出信号。(aosp/1262743

错误修复

版本 2.4.0-alpha01

2020 年 3 月 4 日

androidx.work:work-*:2.4.0-alpha01 已发布。版本 2.4.0-alpha01 包含以下提交。

新功能

  • WorkManager 的进程内调度程序现在功能更强大。以前,进程内调度程序只会考虑执行未延迟且满足约束条件的工作。现在,进程内调度程序会跟踪将来可能执行的 WorkRequest,包括 PeriodicWorkRequest。进程内调度程序也**不会**遵守 调度限制(但仍然受限于 WorkManager 使用的 Executor 的大小)。这意味着当应用处于前台时,应用现在可以执行更多 WorkRequest。(aosp/1185778

  • 添加了使用 adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>" 从 WorkManager 请求诊断信息的功能。这提供了许多有用的信息,包括

    • 过去 24 小时内完成的 WorkRequests。
    • 当前正在运行的 WorkRequests。
    • 已计划的 WorkRequests。(aosp/1235501
  • 新的 Lint 规则强制执行

    • 在使用 setForegroundAsync() API 时使用正确的 foregroundServiceType。(b/147873061aosp/1215915
    • 指定 WorkManager 在直接使用 JobService API 时应使用的 JobScheduler ID。(aosp/1223567

API 更改

  • 添加了 ExistingWorkPolicy.APPEND_OR_REPLACE,它类似于 APPEND,但会**替换**具有已取消或失败先决条件的链。(b/134613984aosp/1199640

  • 提供了添加自定义 RunnableScheduler 来跟踪将来需要执行的 WorkRequest 的功能。进程内调度程序使用此功能。(aosp/1203944

错误修复

  • 弃用 RxWorker 中的 setProgress(),因为它之前返回了一个 Single<Void>,这是一个不可能的类型。添加了一个新的 API setCompletableProgress(),它返回一个 Completable;并添加了新的 Lint 规则,有助于迁移到新的 API。(b/150080946aosp/1242665

版本 2.3.4

版本 2.3.4

2020 年 3 月 18 日

androidx.work:work-*:2.3.4 已发布。版本 2.3.4 包含以下提交。

错误修复

  • 修复了一个错误,该错误会导致在超过 10 分钟执行窗口后,运行多个长时间运行的 Worker 实例。(aosp/1247484b/150553353
  • 修复了 WorkManager 的 lint IssueRegistry。感谢来自 Slack 的 @ZacSweers 的贡献。(aosp/1217923

版本 2.3.3

版本 2.3.3

2020 年 3 月 4 日

androidx.work:work-*:2.3.3 已发布。版本 2.3.3 包含以下提交。

错误修复

  • 修复了一个错误,如果 Worker 被中断,它将无法正确重新调度。(b/150325687aosp/1246571

版本 2.3.2

版本 2.3.2

2020 年 2 月 19 日

androidx.work:work-*:2.3.2 已发布。版本 2.3.2 包含以下提交。

错误修复

  • 修复了在某些情况下 WorkManager 超过 JobScheduler 中 100 个作业限制的问题。(aosp/1226859b/149092520
  • 修复了 ConstraintControllers 中的竞争条件。(aosp/1220100
  • 改进了长时间运行的 Worker 的前台服务生命周期管理。(aosp/1226295
  • 改进了在 Worker 取消时取消长时间运行的 Worker 的通知的管理。(aosp/1228346

版本 2.3.1

版本 2.3.1

2020 年 2 月 5 日

androidx.work:work-*:2.3.1 已发布。版本 2.3.1 包含以下提交

错误修复

  • 更好地管理长时间运行的 Worker(在活动的前台 Service 中运行)的 Notification 的生命周期。(aosp/1218539b/147249312
  • WorkManager 现在依赖于稳定的 androidx.sqlite:sqlite-framework:2.1.0。(aosp/1217729
  • 添加了 lint 规则,以确保在 ForegroundInfo 中使用 foregroundServiceType 时,在 AndroidManifest.xml 中指定了 foregroundServiceType。(aosp/1214207b/147873061

版本 2.3.0

版本 2.3.0

2020 年 1 月 22 日

androidx.work:work-*:2.3.0 发布,自 2.3.0-rc01 以来没有更改。版本 2.3.0 包含以下提交

自 2.2.0 以来重要的更改

  • 通过 ListenableWorker#setForegroundAsync() 支持长时间运行或重要工作。
  • 通过 ListenableWorker#setProgressAsync() 支持 Worker 进度。
  • WorkManager 现在将其他 lint 规则打包为库的一部分,这有助于尽早发现错误。

版本 2.3.0-rc01

2020 年 1 月 8 日

androidx.work:work-*:2.3.0-rc01 已发布。版本 2.3.0-rc01 包含以下提交

此版本与 2.3.0-beta02 相同。

错误修复

  • work-testing 工件现在在 work-runtime-ktx 上定义了一个 api 依赖项。(aosp/1194410

版本 2.3.0-beta02

2019 年 12 月 18 日

androidx.work:work-*:2.3.0-beta02 已发布。版本 2.3.0-beta02 包含以下提交

新功能

  • 为不可恢复的 SQLite 异常添加了更好的错误消息。(aosp/1185777
  • 添加了一个 lint 规则,该规则确保在使用按需初始化时,从 AndroidManifest.xml 中删除内容提供程序 androidx.work.impl.WorkManagerInitializer。(aosp/1167007
  • enqueue() 用于 PeriodicWorkRequest 而不是 enqueueUniquePeriodicWork() 时,添加了一个 lint 警告。(aosp/1166032

API 更改

  • ForegroundInfo 现在要求您在使用 ListenableWorker.setForegroundAsync() 时指定要使用的 notificationId。**这是一个重大更改。**这允许您并行运行多个长时间运行的 WorkerWorkManager 也更好地管理提供的 Notification 的生命周期。(b/145473554aosp/1181208asop/1181216asop/1183577

错误修复

  • 修复了 AlarmManager 实现中的一个错误,该错误会导致警报无法正确清除。(aosp/1156444
  • 修复了一个错误,该错误会导致空 WorkRequest 列表导致构建不正确的 WorkContinuation 链。(b/142835274aosp/1157051

依赖项更改

  • WorkManager 现在使用 Room 2.2.2。

版本 2.3.0-beta01

2019 年 11 月 20 日

androidx.work:work-*:2.3.0-beta01 已发布。版本 2.3.0-beta01 包含以下提交

新功能

  • 添加了一个新的 lint 规则,该规则可以防止在使用按需初始化时,由于 androidx.work.Configuration.Provider 的实现不正确而导致的开发人员错误。aosp/1164559

版本 2.3.0-alpha03

2019 年 10 月 23 日

androidx.work:work-*:2.3.0-alpha03 已发布。版本 2.3.0-alpha03 包含以下提交

新功能

  • 添加了 WorkManager.createCancelPendingIntent() API,该 API 可以轻松取消 WorkRequest,而无需在 AndroidManifest.xml 中注册其他组件。此 API 使从 Notification 取消 WorkRequest 特别容易。我们预计这将与 2.3.0 中的新前台 API 配合使用。
  • WorkManager 现在依赖于稳定的 androidx.room:*:2.2.0

API 更改

  • ForegroundInfo.getNotificationType() 重命名为 ForegroundInfo.getForegroundServiceType(),使其与底层平台 API 更加一致。(b/142729893aosp/1143316

错误修复

  • 修复了一个错误,该错误是由在事务之外不必要地调用 setTransactionSuccessful() 引起的。这发生在罕见的迁移中。(b/142580433aosp/1141737

版本 2.3.0-alpha02

2019 年 10 月 9 日

androidx.work:work-*:2.3.0-alpha02 已发布。版本 2.3.0-alpha02 包含以下提交

新功能

  • WorkManager 现在支持运行应由操作系统保持活跃的长时间运行或重要工作。有关更多信息,请查看 ListenableWorker#setForegroundAsync()(或 Kotlin 中的 CoroutineWorker#setForeground())。(aosp/1133636)

API 更改

  • Data 中的 containsKey API 已重命名为 hasKeyWithValueOfTypektx 库中的相应扩展方法也已重命名。(b/141916545

错误修复

  • 当排队的 WorkRequest 数量接近 调度限制 时,WorkManager 会公平地调度工作。(aosp/1105766
  • 只有在工作尚未完成的情况下,WorkManager 才会调用 ListenableWorker#onStopped()。(b/140055777
  • WorkManager 现在会在工作者被中断或到达其终止状态时删除进度信息。(aosp/1114572
  • Data 现在具有更有用的 toString() 表示形式。(b/140945323
  • Data 现在拥有更好的 equals() 方法。它还支持 Array 类型的 deepEquals。(b/140922528
  • WorkManager 现在将其内部数据库和首选项文件存储在不备份的目录中。(b/114808216

版本 2.3.0-alpha01

2019年8月22日

已发布 androidx.work:work-*:2.3.September 5, 20190-alpha01。 此版本中包含的提交可以 在此处 找到。

新功能

  • ListenableWorker 现在可以通过 setProgressAsync() API 设置进度。还在 CoroutineWorker 中添加了相应的 suspend setProgress API,以及在 RxWorker 中添加了返回 Single<Void>setProgress。 使用这些新 API,工作者可以通过 WorkInfo 传达进度信息,WorkInfo 具有相应的 getProgress API。(b/79481554
  • Data 具有 containsKey() API,可用于验证传递给 Worker 的输入数据是否具有预期类型的键。(b/117136838
  • Data 现在可以使用 Data.toByteArray()Data.fromByteArray() 进行序列化。请注意,Data 没有版本控制保证,因此您**不应**将其持久化或用于应用程序之间的 IPC。它们仅限于在**同一**应用程序的多个进程之间安全使用。
  • 添加了通过 Configuration.setInputMergerFactory 指定 InputMergerFactory 的功能。(b/133273159

API 更改

  • 如果 WorkerFactory 返回之前已调用的 ListenableWorker 实例,WorkManager 将抛出 IllegalStateException 实例。(b/139554406
  • 更新了围绕 ListenableFuture 取消和 ListenableWorker 中的 onStopped() 回调的文档。(b/138413671

错误修复

  • 进程内调度程序现在会忽略具有 idle 约束的 WorkRequest。这些请求现在仅在设备实际处于 idle 状态时才会由 JobScheduler 接收。(aosp/1089779
  • TestScheduler 现在在测试中正确地为其内部任务执行程序使用指定的 Executor。(aosp/1090749

版本 2.2.0

版本 2.2.0

2019年8月15日

已发布 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 工件,当 Google Play 服务可用于 API 级别 <= 22 时,它支持使用 GCMNetworkManager 作为调度程序。这是一个可选的依赖项,有助于在旧版 API 版本上实现更可靠和更高效的后台处理。如果您的应用使用 Google Play 服务,请将此依赖项添加到您的 gradle 文件中,以自动获得 GCMNetworkManager 支持。如果 Play 服务不可用,WorkManager 将继续在旧版设备上回退到 AlarmManager。

版本 2.2.0-rc01

2019年7月30日

已发布 androidx.work:work-*:2.2.0-rc01。 此版本中包含的提交可以 在此处 找到。

错误修复

  • 修复了 AlarmManager 实现中的一个错误,该错误会导致服务过早关闭,并在极少数情况下导致 RejectedExecutionException。(aosp/1092374)(b/138238197)。
  • 添加了解决方案,用于在某些设备上使用 JobScheduler API 时出现的 NullPointerException。(aosp/1091020)(b/138364061),(b/138441699)

版本 2.2.0-beta02

2019年7月19日

已发布 androidx.work:work-*:2.2.0-beta02。 此版本中包含的提交可以 在此处 找到。

错误修复

  • 删除了在 2.2.0-beta01 中引入的意外 jacoco 依赖项。

版本 2.2.0-beta01

2019年7月17日

已发布 androidx.work:work-*:2.2.0-beta01。 此版本中包含的提交可以 在此处 找到。

新功能

  • androidx.work:work-gcm:2.2.0-beta01 是一个新的 Maven 工件,当 Google Play 服务可用于 API 级别 <= 22 时,它支持使用 GCMNetworkManager 作为调度程序。这是一个可选的依赖项,有助于在旧版 API 版本上实现更可靠和更高效的后台处理。如果您的应用使用 Google Play 服务,请将此依赖项添加到您的 gradle 文件中,以自动获得 GCMNetworkManager 支持。如果 Play 服务不可用,WorkManager 将继续在旧版设备上回退到 AlarmManager。

错误修复

  • 修复了在 Nvidia Shield K1 平板电脑上跟踪网络状态时出现的 IllegalArgumentException。(aosp/1010188

版本 2.1.0

版本 2.1.0

2019年7月11日

已发布 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. 在您的自定义 Application 对象上实现 Configuration.Provider
    3. 将所有 WorkManager.getInstance() 的引用更改为 WorkManager.getInstance(Context)。作为此更改的一部分,我们已弃用 WorkManager.getInstance()。即使您没有执行按需初始化,调用新的 WorkManager.getInstance(Context) 替代方法始终更安全。
  • PeriodicWorkRequest 现在支持初始延迟。您可以使用 PeriodicWorkRequest.Builder 上的 setInitialDelay 方法来设置初始延迟。b/111404867
  • 添加了使用 DelegatingWorkerFactory 将委托给一个或多个已注册的 WorkerFactory 的功能。b/131435993
  • 添加了通过 Configuration.Builder.setTaskExecutor 自定义 WorkManager 用于所有内部簿记的 Executor 的功能。
  • 添加了通过在 work-testing 工件中使用 TestWorkerBuilderTestListenableWorkerBuilder 创建可进行单元测试的 WorkerListenableWorker 类。
    • 请注意,work-testing 现在将 Kotlin 作为依赖项并默认包含多个 Kotlin 扩展。
  • 将运行尝试次数添加到 WorkInfo 中。b/127290461
  • Data 类型现在可以存储和检索字节和字节数组。这**不会**更改 Data 对象的最大大小。
  • WorkManager 现在依赖于 Room 2.1.0,这应该可以修复一些数据库问题。

版本 2.1.0-rc01

2019年6月27日

已发布 androidx.work:work-*:2.1.0-rc01。 此版本中包含的提交可以 在此处 找到。

错误修复

  • 修复了一个错误,该错误会导致应用程序在备份正在进行时使用 JobScheduler 执行作业时崩溃 b/135858602

版本 2.1.0-beta02

2019年6月20日

已发布 androidx.work:work-*:2.1.0-beta02。 此版本中包含的提交可以 在此处 找到。

错误修复

  • TestListenableWorkerBuilder 现在在创建 ListenableWorker 实例时使用正确的 WorkerFactoryb/135275844
  • 修复了一个错误,该错误导致由于进程死亡而导致 WorkRequest 的执行窗口出现漂移。b/135272196

版本 2.1.0-beta01

2019年6月13日

已发布 androidx.work:work-*:2.1.0-beta01。 此版本中包含的提交可以 在此处 找到。

错误修复

  • WorkManager 现在依赖于 Room 2.1.0,这应该可以修复一些数据库问题。
  • 删除了一些主线程上的启动磁盘 I/O。
  • 修复了约束跟踪中潜在的死锁。b/134361006
  • 抢先取消归因于 WorkManager 的无效作业。b/134058261
  • 为行为异常的设备添加了一些对 JobScheduler API 的防御性调用。

版本 2.1.0-alpha03

2019年6月5日

发布了 androidx.work:*:2.1.0-alpha03 版本。

错误修复

  • 改进了 PeriodicWorkRequest 的文档。
  • WorkManagerTestInitHelper 现在在测试中使用正确的后台执行器。
  • 修复了某些设备上处理大型事务时 SQLite 出现的问题。(b/130182503)
  • WorkManager 的依赖项现在更加细化了。(b/133169148).
  • 解决了使用 WorkManager 调度作业时,JobScheduler 实现中特定于 OEM 的错误。
  • 改进了基于 AlarmManager 的调度程序的服务生命周期,此前这些生命周期会导致罕见的崩溃。(b/133313734)

版本 2.1.0-alpha02

2019 年 5 月 16 日

发布了 WorkManager 2.1.0-alpha02 版本。此版本包含多个新的 API。

API 更改

  • PeriodicWorkRequest 现在支持初始延迟。您可以使用 PeriodicWorkRequest.Builder 上的 setInitialDelay 方法来设置初始延迟。b/111404867

  • 添加了使用 DelegatingWorkerFactory 将委托给一个或多个已注册的 WorkerFactory 的功能。b/131435993

  • 添加了通过 Configuration.Builder.setTaskExecutor 自定义 WorkManager 用于所有内部簿记的 Executor 的功能。

  • 改进了围绕 WorkRequest.keepResultsForAtLeast (b/130638001)、按需初始化和 PeriodicWorkRequest.Builder (b/131711394) 的文档。

版本 2.1.0-alpha01

2019 年 4 月 24 日

发布了 WorkManager 2.1.0-alpha01 版本。此版本包含多个新的 API。请注意,从此版本开始,将会有新的功能不会向 1.x 版本回传。我们建议切换到 2.x 版本。

API 更改

  • 添加了 WorkManager 的按需初始化,它仅在引用时才会创建 WorkManager。b/127497100 设置项目以进行按需初始化
    1. 禁用自动初始化程序.
    2. 在您的自定义 Application 对象上实现 Configuration.Provider
    3. 将所有 WorkManager.getInstance() 的引用更改为 WorkManager.getInstance(Context)。作为此更改的一部分,我们已弃用 WorkManager.getInstance()。即使您没有执行按需初始化,调用新的 WorkManager.getInstance(Context) 替代方法始终更安全。
  • 添加了通过在 work-testing 工件中使用 TestWorkerBuilderTestListenableWorkerBuilder 创建可进行单元测试的 WorkerListenableWorker 类。
    • 请注意,work-testing 现在将 Kotlin 作为依赖项引入,但默认情况下也包含多个 Kotlin 扩展。
  • 将运行尝试次数添加到 WorkInfo 中。b/127290461
  • Data 类型现在可以存储和检索字节和字节数组。这**不会**更改 Data 对象的最大大小。
  • 已弃用 CoroutineWorker.coroutineContext。此字段的类型错误地指定为 CoroutineDispatcher;您不再需要它,因为您可以在挂起函数的主体中自己转到所需的 coroutineContext。
  • RxWorker.createWork()RxWorker.getBackgroundScheduler() 现在使用 @NonNull 注解返回值类型。

版本 2.0.1

版本 2.0.1

2019 年 4 月 9 日

发布了 WorkManager 2.0.1 版本。此版本与 2.0.1-rc01 版本相同。

版本 2.0.1-rc01

2019 年 4 月 3 日

发布了 WorkManager 2.0.1-rc01 版本。此版本包含一些错误修复。对于旧版 1.x 用户,其中一些更改也出现在 1.0.1-rc01 版本中。

错误修复

  • Robolectric 测试现在可以与 WorkManager 正确配合使用。 b/122553577
  • 修复了在 JobScheduler 之前的 API 上约束跟踪未清除导致的边缘情况崩溃。 b/129226383
  • 修复了处理长工作链时出现的 StackOverflowError 错误。 b/129091233
  • 更新了 PeriodicWorkRequest 的文档,以指示 API 23 上不支持弹性时间。
  • 修复了 Kotlin 文档中的一些损坏链接。

版本 2.0.0

版本 2.0.0

2019 年 3 月 20 日

发布了 WorkManager 2.0.0 版本。此版本与 2.0.0-rc01 版本相同,并且是 1.0.0 稳定版(具有 AndroidX 依赖项)的 AndroidX 版本。我们建议您定位此版本,而不是旧版 1.x 版本。所有活动开发都将针对 2.x 版本,而 1.x 版本将在有限的时间内仅接收关键错误修复。

版本 2.0.0-rc01

2019 年 3 月 7 日

发布了 WorkManager 2.0.0-rc01 版本。此版本与 1.0.0 稳定版相同,但具有 AndroidX 依赖项。一旦此版本达到 2.0.0 稳定版,您应该包含此版本,并且旧版 1.x 版本将仅接收一些关键错误修复。所有活动开发都将针对 2.x 版本。

AndroidX 之前的依赖项

有关使用 Kotlin 扩展的信息,请参阅 KTX 文档
参考文档:Java

Groovy

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"
}

Kotlin

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

2019 年 4 月 9 日

发布了 WorkManager 1.0.1 版本。此版本与 1.0.1-rc01 版本相同。

请注意,我们 *强烈* 建议用户更新到 WorkManager 2.x 版本,因为将来 1.x 分支的更新将非常少。1.x 库也不会发布新的 API。

版本 1.0.1-rc01

2019 年 4 月 2 日

发布了 WorkManager 1.0.1-rc01 版本。此版本包含一些错误修复。

错误修复

  • Robolectric 测试现在可以与 WorkManager 正确配合使用。 b/122553577
  • 修复了在 JobScheduler 之前的 API 上约束跟踪未清除导致的边缘情况崩溃。 b/129226383
  • 修复了处理长工作链时出现的 StackOverflowError 错误。 b/129091233

版本 1.0.0

版本 1.0.0

2019 年 3 月 5 日

这是 WorkManager 的 1.0.0 稳定版。此版本的 WorkManager 与 1.0.0-rc02 版本相同。

版本 1.0.0-rc02

2019 年 2 月 21 日

这是 WorkManager 1.0.0 稳定版的第二个候选版本。此版本包含两个错误修复。

错误修复

  • Worker 现在在应用程序崩溃后会正确调度。 b/124546316

  • 抛出未经检查的 ExceptionWorker 现在会正确标记为 FAILED,并且不再导致应用程序进程崩溃。

版本 1.0.0-rc01

2019 年 2 月 14 日

这是 WorkManager 1.0.0 稳定版的候选版本。此版本包含一个错误修复。

错误修复

  • 基于 AlarmManager 的实现现在可以正确遵守 flex 窗口以用于 PeriodicWorkRequests。 b/124274584

版本 1.0.0-beta05

2019 年 2 月 6 日

此版本包含一些错误修复。

错误修复

  • 修复了在 API 23 上使用 JobScheduler.getPendingJob(...) 的情况。 b/123893059
  • 修复了在运行 Android 5.1(API 级别 22)或更低版本的设备上出现的 NullPointerExceptionb/123835104

版本 1.0.0-beta04

2019 年 2 月 4 日

此版本包含一些错误修复。

错误修复

  • 改进了基于 AlarmManager 的实现的 PeriodicWork 调度。
  • 修复了在使用基于 AlarmManager 的实现时,WorkManager 无法正确跟踪约束的情况。 b/123379508
  • 修复了在使用基于 AlarmManager 的实现时,WorkManager 无法在进程死亡后重试工作的情况。 b/123329850
  • 修复了在使用基于 AlarmManager 的实现时,WorkManager 会泄漏 Wakelock 的情况。

版本 1.0.0-beta03

2019 年 1 月 25 日

此版本包含一些错误修复。

错误修复

  • 我们在 1.0.0-beta02 版本中引入了一个回归问题,导致工作在某些情况下无法正确执行。 b/123211993
  • 修复了工作未正确遵守回退时间的情况。 b/122881597
  • 修复了在运行 Android 5.1(API 或)或更低版本的设备上出现的 ConcurrentModificationException。这是 1.0.0-beta02 版本中修复程序的延续。 b/121345393
  • 在清单中为某些缺少此注释的组件添加了 exported=false
  • 在包级文档中包含了有关 WorkManager 如何与操作系统交互的信息。

版本 1.0.0-beta02

2019 年 1 月 15 日

此版本包含一些错误修复。

错误修复

  • 修复了一个边缘情况,即周期性工作可能会在运行 Android 6.0(API 级别 23)的设备上每个间隔运行多次。 b/121998363
  • 修复了在运行 Android 5.1(API 级别 22)或更低版本的设备上出现的 ConcurrentModificationExceptionb/121345393
  • 修复了在运行 Android 5.1(API 级别 22)或更低版本的设备上,在不满足约束条件时错误执行工作的问题。 b/122578012
  • 优化了工作完成处理,使其在某些边缘情况下更快。 b/122358129
  • 添加了一项更改,以解决 WorkManager 使用的多个 LiveData 实例之间潜在的竞争条件。
  • 改为使用 Room 依赖项 1.1.1 而不是 1.1.1-rc01;这两个版本相同。 b/122578011

版本 1.0.0-beta01

2018 年 12 月 19 日

此版本不包含任何 API 更改;展望未来,除非出现严重问题,否则 WorkManager 预计将在下一个版本之前保持 API 稳定。此版本包含一些错误修复。

错误修复

  • 以前已取消的成功完成的父级工作的子级将不再运行。 b/120811767
  • 正确初始化了日志记录类(主要是在测试期间显示)。

版本 1.0.0-alpha13

2018 年 12 月 12 日

此版本包含一个次要的 API 更改,这对某些 Kotlin 用户很有帮助。

API 更改

  • androidx.work.Result 已移至成为 ListenableWorker 的内部类。这可以防止与 Kotlin 的顶级 Result 类发生重构冲突。这是一个破坏性 API 更改。 b/120564418

破坏性 API 更改

  • androidx.work.Result 已移至成为 ListenableWorker 的内部类。

版本 1.0.0-alpha12

2018 年 12 月 5 日

此版本包含一些破坏性 API 更改;请参阅下面的 *破坏性 API 更改* 部分。此版本可能会发布为我们的第一个 Beta 版本。alpha12 还包含大量的文档更新。

API 更改

  • 一个新的工件 work-rxjava2 引入了 RxWorker。这是一个 ListenableWorker,它期望一个 Single<Payload>
  • 由于 Firebase JobDispatcher 即将弃用,因此已删除对其的支持。这意味着随着我们进入 Beta 阶段,work-firebase 工件将不再更新。我们将来会考虑添加替代方案。
  • Payload 合并到 Result 中。Result 现在是一个“密封类”,具有三个具体的实现,您可以通过 Result.success()(或 Result.success(Data))、Result.failure()(或 Result.failure(Data))和 Result.retry() 获取。您的 ListenableFuture 现在返回 Result 而不是 PayloadWorker 没有输出 Data 的 getter 和 setter 方法。这是一个破坏性更改。
  • 添加了 Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) 以及变体,以更好地支持触发缓慢的内容 URI。 b/119919774
  • 添加了 WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) 变体。此方法需要 API 26。
  • 添加了 Operation.await()ListenableFuture.await() Kotlin 扩展方法。
  • Operation.getException() 重命名为 Operation.getThrowable()这是一个破坏性更改。
  • ContentUriTriggers 类以及引用它的方法不再可供公开使用。这是一个破坏性更改。
  • 删除了 WorkManagerWorkContinuationOneTimeWorkRequest 中其余的可变参数方法,以简化 API。要解决任何构建问题,您可以使用 Arrays.asList(...) 包装您现有的可变参数。我们仍然包含每个方法的单参数版本。这是一个破坏性更改。
  • 删除了 WorkContinuation.combine(OneTimeWorkRequest, *) 变体。它们呈现了一个令人困惑的 API;现有的 combine 方法更易于理解。这是一个破坏性更改。

错误修复

  • Marshmallow 之前的实现现在在恢复已执行任务的进程死亡方面更可靠。

  • 通过 observeForever 观察的 LiveData 由 WorkManager 进行跟踪。这是 Room 库修复程序的回退版本。 b/74477406
  • 如果序列化对象超过最大大小,Data.Builder.build() 现在将抛出异常。以前,这只会发生在后台线程中,您无法正确处理它。
  • 进一步区分了已停止和已取消的工作;在 ListenableWorker.onStopped() 期间,getWorkInfoById() 将返回一个具有 CANCELLED StateWorkInfo
  • ListenableWorker 中将 null Result 视为失败。 b/120362353
  • 针对运行 API 24 的 Shield 平板电脑有时会抛出 IllegalArgumentException 的问题进行了推测性修复。 b/119484416

破坏性 API 更改

  • 由于 Firebase JobDispatcher 即将弃用,因此已删除对其的支持。这意味着随着我们进入 Beta 阶段,work-firebase 工件将不再更新。我们将来会考虑添加替代方案。
  • Payload 合并到 Result 中。 Result 现在是一个“密封类”,具有三个具体的实现,您可以通过 Result.success()(或 Result.success(Data))、Result.failure()(或 Result.failure(Data))和 Result.retry() 获取这些实现。您的 ListenableFuture 现在返回 Result 而不是 PayloadWorker 没有用于输出 Data 的 getter 和 setter 方法。
  • 添加了 Operation.await()ListenableFuture.await() Kotlin 扩展方法。
  • Operation.getException() 重命名为 Operation.getThrowable()
  • ContentUriTriggers 类以及引用它的方法不再可供公开使用。
  • 删除了 WorkManagerWorkContinuationOneTimeWorkRequest 中其余的 varargs 方法,以简化 API。要修复任何构建问题,您可以将现有的 varargs 包裹在 Arrays.asList(...) 中。我们仍然包含每个方法的单参数版本。
  • 删除了 WorkContinuation.combine(OneTimeWorkRequest, *) 变体。它们提供了一个令人困惑的 API;现有的 combine 方法更容易理解。

版本 1.0.0-alpha11

2018 年 11 月 8 日

此版本包含许多将在 beta 版中成为稳定 API 的更改。此版本中存在重大 API 更改;请参阅下面的“重大 API 更改”部分。

API 更改

  • work-runtime-ktx 引入了一个新的 CoroutineWorker
  • WorkStatus 已重命名为 WorkInfo。所有相应的 getStatus 方法变体都已重命名为相应的 getWorkInfo 变体。这是一个重大更改。
  • ListenableWorker.onStopped() 不再接受表示 WorkRequest 是否已取消的布尔值参数。 WorkManager 不再区分此情况。这是一个重大更改。
  • androidx.work.test 包已重命名为 androidx.work.testing 包。这是一个重大更改。
  • Constraints 上的 setter 不再是公共 API 的一部分。这是一个重大更改。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 以前返回数组。现在这些方法返回集合。这是一个重大更改。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()这是一个重大更改。
  • WorkStatus 的构造函数不再是公共 API 的一部分。这是一个重大更改。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()这是一个重大更改。
  • 向公共 API 添加了许多 @NonNull 注释,以提高 API 的可用性。
  • 添加 WorkManager.enqueueUniqueWork() API 以排队唯一的 OneTimeWorkRequest,而无需创建 WorkContinuation
  • WorkManager 上所有变体的 enqueuecancel 方法现在返回新的 Operation 类型。这是一个重大更改。
  • enqueue 的所有变体不再接受 WorkRequest 的 varargs。这是一个重大更改。请改用集合。您可以使用 Arrays.asList() 修改现有代码。我们这样做是为了减少 API 表面和方法数量。
  • 每个进程尝试多次 initialize WorkManager 现在将导致 IllegalStateException这是一个重大更改。

错误修复

  • work-runtime-ktx 工件中的 WorkRequest.Builder 现在使用 ListenableWorker。修复了 b/117666259
  • 确保 PeriodicWork 的下次运行时间在将来。修复了 b/118204399
  • 在应用启动时使用 WorkManager 时,删除潜在的磁盘 I/O。修复了 b/117796731
  • 修复了 WorkConstraintsTracker 中的竞争条件。修复了 android-workmanager/issues/56

破坏性 API 更改

  • WorkStatus 已重命名为 WorkInfo。所有相应的 getStatus 方法变体都已重命名为相应的 getWorkInfo 变体。
  • ListenableWorker.onStopped() 不再接受表示 WorkRequest 是否已取消的布尔值参数。 WorkManager 不再区分此情况。
  • androidx.work.test 包已重命名为 androidx.work.testing 包。
  • Constraints 上的 setter 不再是公共 API 的一部分。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 以前返回数组。现在这些方法返回集合。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()
  • WorkStatus 的构造函数不再是公共 API 的一部分。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()
  • WorkManager 上所有变体的 enqueuecancel 方法现在返回新的 Operation 类型。
  • enqueue 的所有变体不再接受 WorkRequest 的 varargs。
  • 每个进程尝试多次 initialize WorkManager 现在将导致 IllegalStateException

版本 1.0.0-alpha10

2018 年 10 月 11 日

此版本支持开发者控制的异步工作。此版本中存在重大 API 更改;请参阅下面的“重大 API 更改”部分。

我们预计 WorkManager 即将进入其 Alpha 阶段的最后阶段。我们期望在 Beta 版中实现 API 稳定,因此请花一些时间在我们的问题跟踪器中提交您的反馈。

API 更改

  • 删除了所有以前 已弃用 的方法和类,特别是默认的 Worker 构造函数。这是一个重大 API 更改。
  • NonBlockingWorker 重命名为 ListenableWorker,它现在是一个未隐藏的公共类,可以随时使用。
    • ListenableWorker 提供了一个抽象方法 ListenableFuture<Payload> onStartWork() 的访问权限,该方法在主线程上调用。您可以异步启动和处理工作。完成后,您应该适当地更新 ListenableFutureListenableFuture 的参考实现在 alpha02 中的 Futures 包中提供(请参阅 WorkManager 部分下面的内容)。
    • Worker 扩展了 ListenableWorker,并且仍然像以前一样运行,具有一个抽象的 Result doWork() 方法。
    • 将一些方法和成员从 Worker 移到 ListenableWorker
    • 我们将很快提供使用 Kotlin 协程(一旦发布稳定版本)和 RxJava2 的 ListenableWorker 的参考实现。
  • 接口 WorkerFactory 和具体实现 DefaultWorkerFactory 已合并到一个名为 WorkerFactory 的抽象类中。该实现确保默认基于反射的行为作为任何用户创建的 WorkerFactory 实例的最后手段被调用。这是一个重大更改。
  • 删除了 WorkManager.synchronous()WorkContinuation.synchronous() 以及所有相关方法。将 ListenableFuture<Void> 作为 API 中许多方法的返回类型。这是一个重大 API 更改。
    • 您现在可以使用 ListenableFuture 同步获取和观察。例如,WorkManager.enqueue() 以前返回 void;现在它返回 ListenableFuture<Void>。您可以调用 ListenableFuture.addListener(Runnable, Executor)ListenableFuture.get() 以在操作完成后运行代码。
    • 请注意,这些 ListenableFuture 不会告诉您操作是否成功或失败;只会告诉您它们已完成。您仍然需要链接 WorkManager 方法以找出此信息。
    • 我们忽略了这些对象上的 cancel() 调用,因为它们令人困惑且难以推理(您是在取消操作还是取消结果工作?)。这在 Future 合同中。
    • 为了与同步 getStatus* 方法保持一致,我们提供了 ListenableFuture 变体,并将返回 LiveData 的现有变体重命名为明确地将“LiveData”作为名称的一部分(例如,getStatusesByIdLiveData(UUID))。这是一个重大 API 更改。

错误修复

  • 修复了 alpha09 中关于重复 androidx-annotations.pro 文件的已知问题。您可以通过从您的 gradle 文件中删除 exclude 'META-INF/proguard/androidx-annotations.pro' 来删除先前发行说明中的解决方法。
  • 添加了 proguard 配置以保留新的 Worker 构造函数。 b/116296569
  • 修复了在工作被 REPLACE 的竞争条件中潜在的 NullPointerExceptionb/116253486b/116677275
  • WorkContinuation.combine() 现在接受一个或多个 WorkContinuation 而不是两个或多个。 b/117266752

破坏性 API 更改

  • 删除了所有以前 已弃用 的方法和类,特别是默认的 Worker 构造函数。

  • 接口 WorkerFactory 和具体实现 DefaultWorkerFactory 已合并到一个名为 WorkerFactory 的抽象类中。
  • 已移除 WorkManager.synchronous()WorkContinuation.synchronous()
  • WorkManager.getStatus*() 方法现在返回 ListenableFutureWorkManager.getStatus*LiveData() 返回 LiveData

版本 1.0.0-alpha09

2018年9月19日

已知问题

如果您遇到以下问题:“More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'”,请在您的gradle文件中添加以下内容作为临时解决方法,我们将在alpha10中修复此问题。

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

错误修复

  • 添加了另一个修复程序,该程序对于“100个作业”错误是必需的。 b/115560696
  • 添加了一些修复程序,用于解决由于竞争条件导致的外键约束错误。 b/114705286
  • ConstraintTrackingWorker.onStopped(boolean) 调用委托给底层的 Workerb/114125093
  • 强制执行 Firebase JobDispatcher 的正确最小回退延迟。 b/113304626
  • 改进了库内部的线程保证。
  • 修复了内部 LiveData 重复数据删除的潜在问题。

API 更改

  • 您现在可以通过在 WorkManager.Configuration 中指定 WorkerFactory,在运行时创建自己的 Worker 实例。回退工厂是 DefaultWorkerFactory,它与先前版本的 WorkManager 的行为匹配。
    • WorkerNonBlockingWorker 的默认构造函数现在已标记为已弃用。请使用新的构造函数(Worker(Context, WorkerParameters))并调用 super(Context, WorkerParameters);未来版本的 WorkManager 将删除默认构造函数。
  • 我们已开始在内部使用新的 ListenableFuture 工件(无 Guava 依赖项)。我们将在即将发布的版本中将 ListenableFutures 引入 API。此更改将支持最终取消隐藏 NonBlockingWorker
  • 添加了通过 TestDriver.setInitialDelayMet(UUID)TestDriver.setPeriodDelayMet(UUID)TestDriver 中触发定时工作的能力。 b/113360060

重大更改

  • 默认的 WorkerNonBlockingWorker 构造函数已弃用。请尽快迁移到新的构造函数。未来版本将删除默认构造函数。

版本 1.0.0-alpha08

2018年8月27日

错误修复

  • 明确将 WorkManager 组件标记为不了解直接启动,因此它们不会在直接启动期间启动。将来,我们将提供一个了解直接启动的 WorkManager 版本。 b/112665532
  • 修复了重试工作未运行的问题。 b/112604021
  • 修复了定期工作未重复执行的问题(与上述问题相关)。 b/112859683
  • 在应用进程已运行时遵守回退策略。
  • 更正了 Data 中的异常消息,以指示限制为 10KB。
  • Configuration.setMaxSchedulerLimit(int) 的最大值降低到 50,以解决 JobScheduler 处理完成时的一些延迟。 b/112817355

版本 1.0.0-alpha07

2018年8月16日

错误修复

  • 修复了可能导致返回无限数量结果的具有负限制的潜在 SQL 查询。
  • 已完成执行的工作现在会正确取消其他调度程序中该工作的全部挂起副本。这会导致超过 JobScheduler 作业限制。 b/111569265
  • 修复了 ConstraintTracker 中的 ConcurrentModificationExceptionb/112272753
  • Data.getBooleanArray(String)Data.getIntArray(String) 的返回类型注释更改为 @Nullable 而不是 @NonNullb/112275229

API 更改

  • Worker 现在扩展了一个新类 NonBlockingWorker。这不会影响任何当前用法。将来,NonBlockingWorker 将成为自定义线程解决方案的完全受支持的实体。
  • Data.getBooleanArray(String)Data.getIntArray(String) 的返回类型注释更改为 @Nullable 而不是 @NonNullb/112275229
  • Kotlin 扩展:已弃用 Map.toWorkData() 并添加了顶级 workDataOf(vararg Pair<String, Any?>) 以与现有 API 保持一致。

版本 1.0.0-alpha06

2018年8月1日

错误修复

  • 在调度工作时防止数据库锁定。 b/111801342
  • 修复了一个错误,该错误导致 PeriodicWork 在休眠模式下未按计划运行。 b/111469837
  • 修复了跟踪约束时的竞争条件,该条件会导致 WorkManager 崩溃。 googlecodelabs/android-workmanager/issues/56
  • 在使用 WorkRequest.Builder#build() 时创建唯一的 WorkRequestb/111408337
  • 仅在有需要它的 WorkRequest 时才启用 RescheduleReceiver 的使用。 b/111765853

版本 1.0.0-alpha05

2018年7月24日

API 更改

  • WorkManager.getInstance() 现在已使用 @NonNull 而不是 @Nullable 进行注释。相反,如果在手动初始化的情况下单例未正确初始化,则该方法将抛出 IllegalStateException。**这是一个破坏性 API 更改。**
  • 添加了一个新的 API,Configuration.Builder.setMinimumLoggingLevel(int),它可以控制 WorkManager 的详细程度。默认情况下,WorkManager 记录 Log.INFO 及以上级别。
  • 更改了 Data.getString() 的签名,因此它不再采用默认值(它隐式为 null)。**这是一个破坏性 API 更改。**
  • 将某些仅用于内部使用的函数标记为 @hide。这包括 Constraints 构造函数、Data.toByteArray()Data.fromByteArray(byte[])。**这是一个破坏性 API 更改。**

错误修复

  • WorkManager 现在不再在已知的自动备份情况下执行工作。这可能会导致崩溃。 b/110564377
  • 修复了在使用 JobSchedulerPeriodicWorkRequest 的双重调度问题。 b/110798652
  • 修复了设备休眠后 PeriodicWorkRequest 未正确执行的问题。 b/111469837
  • 修复了在使用 Firebase JobDispatcher 时初始延迟的问题。 b/111141023
  • 修复了一些潜在的竞争条件和时序问题。
  • 正确释放了不再需要的 BroadcastReceiver
  • 优化了应用在强制关闭后重新启动时的重新调度性能。
  • 允许在排队给定的 WorkRequest 之前或之后调用 TestScheduler.setAllConstraintsMet(UUID)b/111238024

重大更改

  • WorkManager.getInstance() 现在已使用 @NonNull 而不是 @Nullable 进行注释。
  • 更改了 Data.getString() 的签名,因此它不再采用默认值(它隐式为 null)。
  • 将某些仅用于内部使用的函数标记为 @hide。这包括 Constraints 构造函数、Data.toByteArray()Data.fromByteArray(byte[])

版本 1.0.0-alpha04

2018年6月26日

错误修复

  • 在使用基于 AlarmManager 的实现时,PeriodicWorkRequest 现在可以正确重新调度。
  • 修复了在强制停止或重启后重新调度所有工作时可能发生的 ANR。 b/110507716
  • 向各种 WorkManager API 添加了可空性注释。 b/110344065
  • 记录在 Worker 执行期间发生的未捕获异常。 b/109900862
  • 允许破坏性数据库迁移,以防您决定回滚到旧版本的 WorkManager。 b/74633270
  • 如果创建重复的隐式标签,则修复了迁移崩溃。这是一个非常罕见的问题,仅当您自己使用相同的隐式标签格式时才会发生。

版本 1.0.0-alpha03

2018年6月19日

错误修复

  • 修复了基于 AlarmManager 的实现中的竞争条件。 b/80346526

  • 修复了设备重启后使用 JobScheduler 时重复作业的问题。

  • 具有内容 URI 触发器的作业现在可以在重启后持久化。 b/80234744

  • 文档更新。 b/109827628b/109758949b/80230748

  • 修复了重新排队 WorkRequest 时的崩溃问题。 b/109572353

  • 修复了使用 work-runtime-ktx 依赖项时的 Kotlin 编译器警告。

  • WorkManager 现在使用 Room 版本 1.1.1-rc1

API 更改

  • 添加了 getStatusesSync(),它是 WorkContinuation.getStatuses() 的同步版本。
  • Worker 能够区分用户发起的取消和操作系统临时请求的停止。如果已请求任何类型的停止,则 Worker.isStopped() 返回 true。当工作被明确取消时,Worker.isCancelled() 返回 trueb/79632247
  • 添加了对 API 28 上 JobParameters#getNetwork() 的支持。这通过 Worker.getNetwork() 公开。
  • 添加了 Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit),以便您可以强制执行可以发送到 JobSchedulerAlarmManager 的作业数量。这有助于防止 WorkManager 占用您所有可用的 JobScheduler 槽位。
  • 添加了 Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId),这有助于定义 WorkManager 可以安全使用的 JobScheduler 作业 ID 范围。 b/79996760
  • Worker.getRunAttemptCount() 返回给定 Worker 的当前运行次数。 b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) 允许您排队唯一的 PeriodicWorkRequestb/79600647
  • WorkManager.cancelAllWork() 取消所有 Worker。依赖于 WorkManager 的库可以通过使用 WorkManager.getLastCancelAllTimeMillis() 查询上次调用此方法的时间,以进一步清理内部状态。
  • 添加了 WorkManager.pruneWork() 以从内部数据库中删除已完成的作业。 b/79950952b/109710758

行为更改

  • 为所有WorkRequest添加了一个隐式标签,该标签是Worker的完全限定类名。这使得能够在没有tagid不可用时移除WorkRequestb/109572351

重大更改

  • Worker.WorkerResult重命名为Worker.Result
  • Worker.onStopped现在有一个新增的isCancelled参数,当Worker被显式取消时,该参数设置为true

版本 1.0.0-alpha02

2018年5月24日

错误修复

  • 修复了State.isFinished()上的NullPointerExceptionb/79550068
  • 修复了一个导致WorkerApplication.onCreate()中重新调度的问题。 b/79660657
  • 修复了一个允许调度超出操作系统允许范围的工作的问题。 b/79497378
  • 将与Worker关联的唤醒锁的清理移动到后台线程。
  • AlarmManager实现现在在所有挂起工作完成后会正确清理。
  • 修复了影响非英语语言环境的清理SQL查询。 b/80065360
  • 添加了对Datafloat的支持。 b/79443878
  • Data.Builder.putAll()现在返回Builder的实例。 b/79699162
  • 更多Javadoc和文档修复。 b/79691663

API 更改

  • Worker可以对被停止做出反应。Worker.isStopped()可用于检查Worker是否已停止。Worker.onStopped()可用于执行轻量级清理操作。
  • Worker.getTags() API返回与Worker关联的标签的Set
  • 为使用持续时间和TimeUnit组合的API添加了javax.time.Duration重载。这受@RequiresApi(26)保护。
  • WorkManager扩展已从androidx.work.ktx包移至androidx.work包。旧扩展已弃用,将在未来版本中删除。
  • Configuration.withExecutor()已弃用。请改用Configuration.setExecutor()

版本 1.0.0-alpha01

2018年5月8日

WorkManager简化了保证、约束感知型后台工作的调度和执行。此初始版本为1.0.0-alpha01