WorkManager

WorkManager API 可让您轻松调度可延迟的异步任务,这些任务必须可靠地运行。这些 API 允许您创建任务并将其交给 WorkManager 在满足工作限制时运行。
最新更新 稳定版发布 发布候选版 Beta 版发布 Alpha 版发布
2025 年 4 月 23 日 2.10.1 - - -

声明依赖项

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

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

Groovy

dependencies {
    def work_version = "2.10.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.10.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.1

2025 年 4 月 23 日

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

Bug 修复

  • 减少 WorkManager 注册用于约束跟踪的 NetworkCallback 时抛出 TooManyRequestsException 的可能性。(b/231499040, b309d5)。

版本 2.10.0

2024 年 10 月 30 日

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

自版本 2.9.1 以来的重大变更

  • WorkManager 添加了跟踪标签到作业,这使得“adb shell dumpsys jobscheduler”更容易理解,因为它将包含正在执行的 Worker 的名称。跟踪部分也已添加到 WorkManager 的关键区域。
  • 添加了 Configuration.workerCoroutineContext 以控制 CoroutineWorker 执行的调度器。
  • 开发者可以通过 Constraints.setRequiredNetworkRequest 方法指定 NetworkRequest 作为 Worker 的约束。这使得对 Worker 应运行的网络有了更精细的控制。
  • WorkManager 2.10.0 现在已使用 SDK 35 编译,并包含针对 SDK 35 兼容性的各种更改。

版本 2.10.0-rc01

2024 年 10 月 24 日

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

版本 2.10.0-beta01

2024 年 10 月 2 日

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

版本 2.10.0-alpha04

2024 年 9 月 18 日

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

API 变更

  • 添加停止原因 STOP_REASON_FOREGROUND_SERVICE_TIMEOUT,用于当在前台工作器因前台服务类型执行超时而停止时的情况。(Ibd0af)

版本 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 设备。(ca06b2, b/364508145)
  • 新的 WorkerParameters API,使得在使用 WorkerFactory 时可以切换 Worker 绑定的远程进程。(Ibdc8a, Ie8a90, I7373f)

Bug 修复

  • 修复了因前台工作类型拥有 Android 14 前置权限,而这些权限被撤销时,WorkManager 尝试重新启动长时间运行的工作器(即前台工作器)导致的崩溃。(b/333957914)
  • 移除了对新平台 API 访问的手动概括,因为当使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 时,以及当使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有构建时,这都会通过 API 建模自动发生。不使用 AGP 的客户端建议更新到 D8 版本 8.1 或更高版本。有关更多详细信息,请参阅此文章。(Ia60e0, b/345472586)

版本 2.10.0-alpha02

2024 年 4 月 17 日

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

API 变更

  • 增加了通过 WorkManager 中可配置的 @RestrictTo Tracer 发出跟踪范围的功能。(I17d7f, b/260214125)
  • 添加了 Configuration.workerCoroutineContext 以控制 CoroutineWorker 执行的调度器。它有助于完全避免在 WorkManager 中使用 Dispatchers.Default。(Icd1b7)
  • 为 Worker 添加自定义异常处理程序 (Ib1b74, b/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 作为 Worker 的约束。这使得对 Worker 应运行的网络有了更精细的控制。

API 变更

版本 2.9

版本 2.9.1

2024 年 8 月 7 日

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

Bug 修复

  • 修复了因前台工作类型拥有 Android 14 前置权限,而这些权限被撤销时,WorkManager 尝试重新启动长时间运行的工作器(即前台工作器)导致的崩溃。(b/333957914)

版本 2.9.0

2023 年 11 月 29 日

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

自 2.8.0 以来的重要变更

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

API 变更

  • stopReason 已添加到 WorkInfo 中。它使 stopReason 在工作器运行后可用。这有助于以可用方式报告 stopReason,因为一旦工作器停止,应用本身可能会很快被终止。(I21386)
  • 允许通过配置设置 Clock 并用于驱动 Worker 测试的执行序列。(Ic586e)
  • getStopReason() 方法添加到 ListenableWorker 中,该方法提供了 Worker 停止原因的提示。(I07060)
  • 添加了 WorkManagerTestInitHelper#closeWorkDatabase() 以避免 Closeguard 关于资源泄露的警告。(Ia8d49)
  • WorkInfo 的构造函数现在是公共的,这在测试中很有用。(Ia00b6, b/209145335)
  • work-runtime-ktx 现在是空的,CoroutineWorker 和其他特定于 Kotlin 的实用程序现在在主要的 work-runtime 工件中可用。(I71a9a)
  • 添加了 setNextScheduleTimeOverride 方法,该方法允许准确设置周期性工作计划 (I3b4da)
  • 添加了 getNextScheduleTimeMillis 以获取计划运行时间信息到 WorkInfo 中。(I797e4)
  • 初始延迟和周期性信息已添加到 WorkInfo。(I52f2f)
  • 添加了通过 Flow 观察工作器的方法,通过方法 getWorkInfosByTagFlowgetWorkInfoByIdFlowgetWorkInfosForUniqueWorkFlowgetWorkInfosFlow (If122a)
  • Constraints 的构造函数和属性添加了缺失的 @RequiresApi(...) 注解。它们现在与 Constraints.Builder 中从早期版本 WorkManager 中存在的 setter 上的相应注解对齐。(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 包含这些提交。

  • 自上次 beta 版发布以来无更改

版本 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 提供了关于 Worker 之前停止原因的提示。可以通过 Worker 本身通过 getStopReason() 方法或从 WorkInfo 通过 getStopReason() 查询。

API 变更

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

Bug 修复

  • 添加了使用 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 观察 Worker 的进度,而不是通过 LiveData
  • 通过 setNextScheduleTimeOverride 精确调度周期性工作器。这允许动态计算下一个周期性工作计划,可用于实现高级功能,如自适应刷新时间、自定义重试行为,或让新闻源工作器在用户每天醒来之前运行而不会产生漂移。ExistingPeriodicWorkPolicy.UPDATE 应与这些技术一起使用,以避免在调度下一个工作器时取消当前正在运行的工作器。
  • WorkManager 的测试与生产环境中的线程匹配。ExecutorsMode.PRESERVE_EXECUTORS 可用于保留在 Configuration 中设置的执行器并使用真实主线程。
  • 协程 API,如 CoroutineWorker,已从附加工件 work-runtime-ktx 移至主工件 work-runtimework-runtime-ktx 现在是空的。

API 变更

  • WorkInfo 的构造函数现在是公共的,这在测试中很有用。(Ia00b6, b/209145335)
  • work-runtime-ktx 现在是空的,CoroutineWorker 和其他特定于 Kotlin 的实用程序现在在主要的 work-runtime 工件中可用。(I71a9a)
  • 添加了 setNextScheduleTimeOverride 方法,该方法允许准确设置周期性工作计划 (I3b4da)
  • getEarliestRunTimeMillis 重命名为 getNextScheduleTimeMillis。(I2bd7a)
  • 下一个计划运行时间信息已添加到 WorkInfo。(I797e4)
  • 初始延迟和周期性信息已添加到 WorkInfo。(I52f2f)
  • 添加了通过 Flow 观察工作器的方法,通过方法 getWorkInfosByTagFlowgetWorkInfoByIdFlowgetWorkInfosForUniqueWorkFlowgetWorkInfosFlow (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 包含这些提交。

Bug 修复

  • 修复了 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 以更新工作,同时保留其原始排队时间和链接。(I9a248, b/219446409)
  • 添加了 ExistingPeriodicWorkPolicy.UPDATE。此策略允许按名称更新周期性工作。它类似于现有的 REPLACE,但侵入性较小:如果 Worker 当前正在运行,它不会取消 Worker,并且它保留了排队时间 - 初始延迟和周期是根据原始排队时间而不是更新时间计算的。REPLACE 已弃用,以减少名称非常相似的 REPLACEUPDATE 之间的混淆。如果您仍然希望保留 REPLACE 的先前语义,可以使用新添加的 CANCEL_AND_REENQUEUE,它与 REPLACE 相同。(I985ed, b/219446409)
  • 通过 setSchedulingExceptionHandler 添加了拦截调度异常的功能,提供了 Consumer<Throwable>
  • 添加了通过 setInitializationExceptionHandler 提供 Consumer<Throwable> 的功能,以确定初始化 WorkManager 时是否存在问题。
  • OneTimeWorkRequestPeriodicWorkRequest 的内联助手已从 androidx.work:work-runtime-ktx 移至 androidx.work:work-runtime (I0010f, b/209145335)
  • 添加了辅助方法 WorkQuery.fromIdsWorkQuery.fromStatesWorkQuery.fromUniqueWorkNamesWorkQuery.fromTags 以直接创建 WorkQuery。(b/199919736) (If48f2, b/199919736)
  • 添加了 getForegroundInfoWorker。(Ic1ead)
  • RxJava 2 和 RxJava 3 的 RxWorker 现在都有返回 CompletablesetForeground,可以代替返回 ListenableFuturesetForegroundInfoAsync 使用。
  • RxJava 2 和 RxJava 3 的 RxWorker 都具有返回 SinglegetForegroundInfo,可替代返回 ListenableFuturegetForegroundInfoAsync 使用。(b/203851459)
  • 现在可以直接构造约束,而无需使用 Constraints.Builder,这对于 Kotlin 用户来说很方便。(Idc390, b/137568653)
  • 添加了检查 WorkManager 是否已初始化的功能。此外,还为库开发者添加了一个新的 getConfiguration() API,以获取 WorkManager 初始化时使用的配置。(I6eff3, b/212300336)

Bug 修复

  • 修复了贪婪调度器的问题,该调度器在负载较高时会阻止工作器立即运行。(I9686b, b/248111307)
  • 向要求授予 SDK 33 及更高版本上 POST_NOTIFICATIONS 权限的 API 添加了 @RequiresPermission。(Ie542e, b/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 包含这些提交。

Bug 修复

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

版本 2.8.0-beta01

2022 年 10 月 5 日

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

Bug 修复

  • 修复了贪婪调度器的问题,该调度器在负载较高时会阻止工作器立即运行。(I9686b, b/248111307)

版本 2.8.0-alpha04

2022 年 9 月 7 日

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

API 变更

  • 添加了 WorkerInfo.getGeneration()WorkerParameters.getGeneration(),它们返回 Worker 的代数。如果 Worker 通过 WorkManager.updateWorkWorkManager.enqueueUniquePeriodicWork 使用 ExistingPeriodicWorkPolicy.UPDATE 更新,则 Worker 具有多代。请注意,如果 Worker 当前正在运行,并且在 Worker 执行期间发生了更新,则此方法可能会返回比当前运行 Worker 更新的代。(I665c5, b/219446409) (I128a9, b/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 以更新工作,同时保留其原始排队时间和链接。(I9a248, b/219446409)
  • 添加了 ExistingPeriodicWorkPolicy.UPDATE。此策略允许按名称更新周期性工作。它类似于现有的 REPLACE,但侵入性较小:如果 Worker 当前正在运行,它不会取消 Worker,并且它保留了排队时间 - 初始延迟和周期是根据原始排队时间而不是更新时间计算的。REPLACE 已弃用,以减少名称非常相似的 REPLACEUPDATE 之间的混淆。如果您仍然希望保留 REPLACE 的先前语义,可以使用新添加的 CANCEL_AND_REENQUEUE,它与 REPLACE 相同。(I985ed, b/219446409)
  • 通过定义 SchedulingExceptionHandler 添加了拦截调度异常的功能。(I033eb)
  • OneTimeWorkRequestPeriodicWorkRequest 的内联助手已从 androidx.work:work-runtime-ktx 移至 androidx.work:work-runtime (I0010f, b/209145335)

Bug 修复

  • 向要求授予 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)
  • 添加了 getForegroundInfoWorker。(Ic1ead)
  • 添加了辅助方法 WorkQuery.fromIds 以直接从 ID 创建 WorkQuery。(Ie5bdf, b/199919736)
  • RxWorker 现在有返回 CompletablesetForeground,可以代替返回 ListenableFuturesetForegroundInfoAsync 使用。(I85156)
  • RxJava 2 的 RxWorker 现在有返回 SinglegetForegroundInfo,可以代替返回 ListenableFuturegetForegroundInfoAsync 使用。(I21c91, b/203851459)
  • RxJava 3 的 RxWorker 现在有返回 SinglegetForegroundInfo,可以代替返回 ListenableFuturegetForegroundInfoAsync 使用。(I1ca8a)
  • RxWorker 现在有返回 CompletablesetForeground,可以代替返回 ListenableFuturesetForegroundInfoAsync 使用。(I992a3, b/203851459)

Bug 修复

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

版本 2.7

版本 2.7.1

2021 年 11 月 17 日

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

Bug 修复

  • 使用 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 开始委托给 JobScheduler 中的加速作业,同时通过委托给前台服务提供对早期 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)

Bug 修复

  • 为未实现 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

Bug 修复

  • 当加速作业重新调度时,它们不再是加速作业。它们变为常规作业。

版本 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 包含这些提交。

Bug 修复

  • 使 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 包含这些提交。

Bug 修复

  • RemoteWorkManager 现在正确地与 RemoteWorkManagerService 解绑,这允许 RemoteWorkManagerService 正确清理。aosp/1730694
  • RemoteListenableWorker 现在正确地与 RemoteWorkerService 解绑,这允许 RemoteWorkerService 正确清理。aosp/1743817
  • ForceStopRunnable 现在只在主应用进程中运行。这是一种优化,可以避免使用多个进程的应用的资源争用。aosp/1749180, aosp/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)
  • 多进程工作器支持 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)

Bug 修复

  • 添加了一个 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 现在通过协调作业确保在应用程序初始化时每个 WorkRequest 都有支持作业。这大大提高了作业执行的可靠性。(b/172475041, aosp/1489577)
  • WorkManager 通过减少 WorkRequest 完成后跟踪 WorkRequest 的缓冲持续时间来限制数据库增长。之前的持续时间为 7 天。现已缩短为 1 天 + keepResultsForAtLeast 持续时间。(aosp/1419708)
  • TestListenableWorkerBuilder 现在支持扩展 ListenableWorker 的具象类,使测试更容易。(aosp/1443299, b/169787349)
  • 使用 Android Studio Arctic Fox 时,WorkManager 检测器 现已可用。

版本 2.5.0-rc01

2021 年 1 月 13 日

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

Bug 修复

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

版本 2.5.0-beta02

2020 年 12 月 2 日

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

Bug 修复

  • 修复了 androidx.work:work-multiprocess 中的一个错误,其中 WorkManager 在尝试绑定到指定进程时无意中阻塞了调用线程。(aosp/1475538)
  • 修复了 PeriodicWorkRequest 未正确协调的错误。(b/172475041, aosp/1489577)
  • 添加了对使用 setForeground* API 时停止前台服务的平台错误的解决方法。(b/170924044, aosp/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)

Bug 修复

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

版本 2.5.0-alpha03

2020 年 10 月 14 日

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

API 变更

  • TestListenableWorkerBuilderTestWorkerBuilder 不使用原始类型。(I883ad, b/169787349)

Bug 修复

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

版本 2.5.0-alpha02

2020 年 9 月 16 日

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

新功能

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

API 变更

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

Bug 修复

  • 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提供更好的工具。请继续关注其他更新。

Bug 修复

  • 在某些设备上跟踪网络状态时,处理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小时内完成的WorkRequest。
    • 当前正在RUNNING的WorkRequest。
    • 已调度的WorkRequest。(aosp/1235501
  • 增加了ExistingWorkPolicy.APPEND_OR_REPLACE,它类似于APPEND,但会替换已取消或失败的先决条件链。(b/134613984aosp/1199640

  • 提供了添加自定义RunnableScheduler的功能,以跟踪未来需要执行的WorkRequest。这由进程内调度器使用。(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 版本包含这些提交。

Bug 修复

  • 进程内调度器现在使用更好的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 版本包含这些提交。

Bug 修复

  • 修复了前台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

Bug 修复

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

Bug 修复

版本 2.4.0-alpha01

2020年3月4日

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

新功能

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

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

    • 过去24小时内完成的WorkRequest。
    • 当前正在RUNNING的WorkRequest。
    • 已调度的WorkRequest。(aosp/1235501
  • 新的Lint规则强制执行以下操作:

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

API 变更

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

  • 提供了添加自定义RunnableScheduler的功能,以跟踪未来需要执行的WorkRequest。这由进程内调度器使用。(aosp/1203944

Bug 修复

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

版本 2.3.4

版本 2.3.4

2020年3月18日

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

Bug 修复

  • 修复了一个错误,该错误会导致长时间运行的Worker在超过10分钟的执行窗口后运行多个实例。(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 版本包含这些提交。

Bug 修复

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

版本 2.3.2

版本 2.3.2

2020年2月19日

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

Bug 修复

  • 修复了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 版本包含这些提交

Bug修复

  • 更好地管理在前台Service活动时运行的长时间运行WorkerNotification生命周期。(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相同

Bug修复

  • work-testing artifact现在定义了对work-runtime-ktxapi依赖项。(aosp/1194410

版本 2.3.0-beta02

2019年12月18日

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

新功能

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

API变更

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

Bug修复

  • 修复了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,它可以轻松取消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

Bug修复

  • 修复了在事务外部不必要地调用 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

Bug修复

  • 当排队的 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-ing 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 取消和 ListenableWorkeronStopped() 回调的文档更新。(b/138413671

Bug修复

  • 进程内调度器现在会忽略具有 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 已发布。此版本中包含的提交可以在此处找到。

Bug修复

  • 修复了 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 已发布。此版本中包含的提交可以在此处找到。

Bug修复

  • 移除了在 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。

Bug修复

  • 修复了在 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 扩展。
  • 将运行尝试计数添加到 WorkInfob/127290461
  • Data 类型现在可以存储和检索字节和字节数组。这不会改变 Data 对象的最大大小。
  • WorkManager 现在依赖于 Room 2.1.0,这应该可以修复一些数据库问题。

版本 2.1.0-rc01

2019 年 6 月 27 日

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

Bug修复

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

版本 2.1.0-beta02

2019 年 6 月 20 日

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

Bug修复

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

版本 2.1.0-beta01

2019 年 6 月 13 日

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

Bug修复

  • 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 已发布。

Bug修复

  • 改进了 PeriodicWorkRequest 的文档。
  • WorkManagerTestInitHelper 现在使用正确的后台执行器进行测试。
  • 修复了在某些设备上处理大事务时出现的 SQLite 问题。(b/130182503
  • WorkManager 的依赖项现在更加精细。(b/133169148)。
  • 解决了 OEM 特定的 JobScheduler 实现中的错误,该错误在使用 WorkManager 调度作业时出现。
  • 基于 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 扩展。
  • 将运行尝试计数添加到 WorkInfob/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 中。

Bug 修复

  • Robolectric 测试现在可以与 WorkManager 正常运行。b/122553577
  • 修复了在 Pre-JobScheduler API 上约束跟踪未清理的边缘情况崩溃。b/129226383
  • 修复了处理长链工作时出现的 StackOverflowErrorb/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 为目标。

Pre-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 已发布。此版本包含一些错误修复。

Bug 修复

  • Robolectric 测试现在可以与 WorkManager 正常运行。b/122553577
  • 修复了在 Pre-JobScheduler API 上约束跟踪未清理的边缘情况崩溃。b/129226383
  • 修复了处理长链工作时出现的 StackOverflowErrorb/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 稳定版的第二个候选版本。此版本包含两个错误修复。

Bug 修复

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

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

版本 1.0.0-rc01

2019 年 2 月 14 日

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

Bug 修复

  • 基于 AlarmManager 的实现现在正确遵守 PeriodicWorkRequest 的 flex 窗口。b/124274584

版本 1.0.0-beta05

2019 年 2 月 6 日

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

Bug 修复

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

版本 1.0.0-beta04

2019 年 2 月 4 日

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

Bug 修复

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

版本 1.0.0-beta03

2019 年 1 月 25 日

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

Bug 修复

  • 我们在 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 日

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

Bug 修复

  • 修复了在运行 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 稳定,直到下一个版本,除非出现严重问题。此版本包含一些错误修复。

Bug 修复

  • 先前已取消的成功完成的父工作的子工作将不再运行。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。这是一个需要 Single<Payload>ListenableWorker
  • 由于 Firebase JobDispatcher 即将弃用,已移除对其的支持。这意味着 work-firebase 工件在我们进入 beta 阶段后将不再更新。我们将在未来考虑添加替代方案。
  • 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 方法更易于理解。这是一个破坏性更改。

Bug 修复

  • Pre-Marshmallow 实现现在在从已执行任务的进程死亡中恢复时更可靠。
  • 通过 observeForever 观察的 LiveData 通过 WorkManager 进行跟踪。这是 Room 库修复的回溯。b/74477406
  • Data.Builder.build() 现在在序列化对象超出其最大大小时会抛出异常。这以前只会在您无法正确处理的后台线程中发生。
  • 进一步区分了已停止和已取消的工作;getWorkInfoById() 将在 ListenableWorker.onStopped() 期间返回 WorkInfo,其 StateCANCELLED
  • ListenableWorker 中将 null Result 视为失败。b/120362353
  • 针对运行 API 24 的 Shield 平板电脑有时会抛出 IllegalArgumentException 的推测性修复。b/119484416

破坏性 API 更改

  • 由于 Firebase JobDispatcher 即将弃用,已移除对其的支持。这意味着 work-firebase 工件在我们进入 beta 阶段后将不再更新。我们将在未来考虑添加替代方案。
  • 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 中其余的可变参数方法,以简化 API。要解决任何构建问题,您可以将现有可变参数包装在 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() 之前返回数组。现在这些方法返回 Collection。这是一个破坏性更改。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()这是一个破坏性更改。
  • WorkStatus 的构造函数不再是公共 API 的一部分。这是一个破坏性更改。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 已分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()这是一个破坏性更改。
  • 在公共 API 中添加了许多 @NonNull 注解,以改善 API 的人体工程学。
  • 添加 WorkManager.enqueueUniqueWork() API,用于排队唯一的 OneTimeWorkRequest,而无需创建 WorkContinuation
  • WorkManagerenqueuecancel 方法的所有变体现在都返回一个新的 Operation 类型。这是一个破坏性更改。
  • enqueue 的所有变体不再接受 WorkRequest 的可变参数。这是一个破坏性更改。请改用 Collections。您可以使用 Arrays.asList() 来修改现有代码。我们这样做是为了减少 API 表面和方法计数。
  • 尝试在每个进程中多次 initialize WorkManager 现在将导致 IllegalStateException这是一个破坏性更改。

Bug 修复

  • 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() 之前返回数组。现在这些方法返回 Collections。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()
  • WorkStatus 的构造函数不再是公共 API 的一部分。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 已分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()
  • WorkManagerenqueuecancel 方法的所有变体现在都返回一个新的 Operation 类型。
  • enqueue 的所有变体不再接受 WorkRequest 的可变参数。
  • 尝试在每个进程中多次 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() 的访问,该方法在主线程上调用。异步启动和处理工作由您决定。完成后,您应该相应地更新 ListenableFuture。参考实现 ListenableFuturealpha02 中的 Futures 包中提供(请参阅下面的 WorkManager 部分)。
    • Worker 扩展了 ListenableWorker,并且仍然像以前一样运行,带有一个抽象的 Result doWork() 方法。
    • Worker 中的一些方法和成员移到了 ListenableWorker
    • 我们很快将为使用 Kotlin 协程(一旦稳定版本发布)和 RxJava2 的 ListenableWorker 提供参考实现。
  • 接口 WorkerFactory 和具体实现 DefaultWorkerFactory 已合并到一个名为 WorkerFactory 的抽象类中。该实现确保对于任何用户创建的 WorkerFactory 实例,默认的基于反射的行为作为最后的尝试被调用。这是一个破坏性更改。
  • 移除了 WorkManager.synchronous()WorkContinuation.synchronous() 以及所有相关方法。在 API 的许多方法中添加了 ListenableFuture<Void> 作为返回类型。这是一个破坏性 API 更改。
    • 您现在可以使用 ListenableFuture 同步获取和观察。例如,WorkManager.enqueue() 以前返回 void;它现在返回 ListenableFuture<Void>。您可以调用 ListenableFuture.addListener(Runnable, Executor)ListenableFuture.get() 以在操作完成后运行代码。
    • 请注意,这些 ListenableFuture 不会告诉您操作是成功还是失败;只告诉您它们已完成。您仍然需要链式调用 WorkManager 方法才能找到此信息。
    • 我们忽略了这些对象上的 cancel() 调用,因为它们令人困惑且难以理解(您是取消操作还是取消生成的工作?)。这符合 Future 契约。
    • 为了与同步 getStatus* 方法保持一致,我们提供了 ListenableFuture 变体,并将返回 LiveData 的现有方法重命名为显式地包含“LiveData”作为名称的一部分(例如,getStatusesByIdLiveData(UUID))。这是一个破坏性 API 更改。

Bug 修复

  • 修复了 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 日

已知问题

如果您遇到以下问题:“找到多个具有 OS 独立路径 '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")
    }
}

Bug 修复

  • 添加了解决“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 日

Bug 修复

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

版本 1.0.0-alpha07

2018 年 8 月 16 日

Bug 修复

  • 修复了具有负限制的潜在 SQL 查询可能返回无界数量结果的问题。
  • 已完成执行的工作现在可以正确取消该工作在其他调度器中的所有待定副本。这导致超出了 JobScheduler 作业限制。b/111569265
  • 修复了 ConstraintTracker 中的 ConcurrentModificationExceptionb/112272753
  • Data.getBooleanArray(String)Data.getIntArray(String) 的返回类型注解从 @NonNull 更改为 @Nullableb/112275229

API 变更

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

版本 1.0.0-alpha06

2018 年 8 月 1 日

Bug 修复

版本 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 更改。

Bug 修复

  • 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 日

Bug 修复

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

版本 1.0.0-alpha03

2018 年 6 月 19 日

Bug 修复

  • 修复了基于 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() 在请求任何类型的停止时返回 trueWorker.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 日

Bug 修复

  • 修复了 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