WorkManager

WorkManager API 简化了安排必须可靠运行的可推迟异步任务的过程。这些 API 允许您创建任务并将其交给 WorkManager,以便在满足工作约束条件时运行。
最新更新 稳定版 候选版 测试版 Alpha 版
2024 年 10 月 30 日 2.9.1 - - -

声明依赖项

要添加对 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 版本

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,用于当由于基于前台服务类型的执行超时而停止前台 Worker 时。(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 编译。
  • 修复了类型为“短服务”和“数据同步”的前台 Worker 超时并导致 ANR 的问题,当 WorkManager 未调用 stopSelf() 时。此修复程序仅适用于安装了 API 34 和 35 的设备(在这些设备上引入了前台服务类型)。(ca06b2b/364508145)
  • 新的 WorkerParameters API,可以使用它在使用 WorkerFactory 时切换 Worker 绑定的远程进程。(Ibdc8aIe8a90I7373f)

错误修复

  • 修复了 WorkManager 尝试重新启动长时间运行的 Worker(即前台 Worker)时发生的崩溃,此时工作的前台类型具有已被撤销的 Android 14 先决条件权限。(b/333957914)
  • 删除了对新平台 API 的手动访问概述,因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 以及在使用 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)
  • 为 Worker 添加自定义异常处理程序(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-alpha012.10.0-alpha01 版本包含这些提交。

新功能

  • 开发人员可以通过 Constraints.setRequiredNetworkRequest 方法指定 NetworkRequest 作为 Worker 的约束条件。这使得可以更精细地控制此 Worker 应运行的网络。

API 更改

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

2.9 版本

2.9.1 版本

2024 年 8 月 7 日

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

错误修复

  • 修复了 WorkManager 尝试重新启动长时间运行的 Worker(即前台 Worker)时发生的崩溃,此时工作的前台类型具有已被撤销的Android 14 先决条件权限。(b/333957914)

2.9.0 版本

2023 年 11 月 29 日

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

自 2.8.0 版本以来的重要更改

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

API 更改

  • stopReason 已添加到 WorkInfo。它使在 Worker 运行后可以访问 stopReason。这在以可用的方式报告 stopReason 时可能很有用,因为一旦 Worker 被停止,应用程序本身可能会很快被终止。(I21386)
  • 允许通过配置设置 Clock 并将其用于驱动 Worker 测试的执行顺序。(Ic586e)
  • 已向 ListenableWorker 添加 getStopReason() 方法,该方法提示 Worker 停止的原因。(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 观察 Worker 的方法(If122a)
  • Constraints 的构造函数和属性添加了缺少的 @RequiresApi(...) 注释。它们现在与自早期版本的 WorkManager 以来存在的 Constraints.Builder 中的 setter 上的相应注释对齐。(I6d7d2)
  • 现在,WorkManager 对内容 URI Worker 具有单独的限制,以便在高负载下为它们提供 JobScheduler 中的保证插槽,以防止错过内容更新。可以通过 Configuration.Builder.setContentUriTriggerWorkersLimit 配置此限制。(Ic128f)
  • 约束条件已添加到 WorkInfo。(I162c0)

2.9.0-rc01 版本

2023 年 10 月 18 日

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

  • 自上次 Beta 版本以来没有更改

2.9.0-beta01 版本

2023 年 9 月 6 日

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

API 更改

2.9.0-alpha02 版本

2023年7月26日

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

新功能

  • 现在 WorkManager 提供了有关先前停止 Worker 原因的提示。可以通过 getStopReason() 方法从 Worker 本身查询,也可以通过 getStopReason()WorkInfo 查询。

API 更改

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

错误修复

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

2.9.0-alpha01 版本

2023年6月7日

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

新功能

  • 通过 Flow 进行可观察性。Worker 的进度现在可以通过 WorkManager.getWorkInfosFlow 和类似方法通过 Flow 进行观察,而不是 LiveData
  • 通过 setNextScheduleTimeOverride 精确调度周期性 worker。这允许动态计算下一个周期性工作计划,可用于实现高级功能,例如自适应刷新时间、自定义重试行为或在用户每天早上醒来之前运行新闻推送 worker,而不会出现漂移。应将 ExistingPeriodicWorkPolicy.UPDATE 与这些技术一起使用,以避免在调度下一个 worker 时取消当前正在运行的 worker。
  • 使用与生产环境匹配的线程对 WorkManager 进行测试。可以使用 ExecutorsMode.PRESERVE_EXECUTORS 保留在 Configuration 中设置的执行器并使用真正的主线程。
  • 诸如 CoroutineWorker 之类的协程 API 已从附加构件 work-runtime-ktx 移动到主构件 work-runtimework-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 观察 Worker 的方法(If122a)
  • 为 Constraints 的构造函数和属性添加了缺少的 @RequiresApi(...) 注释。它们现在与 WorkManager 早期版本中存在的 Constraints.Builder 中的 setter 上的相应注释保持一致。(I6d7d2)
  • WorkManager 现在对内容 URI worker 有一个单独的限制,以便为它们在 JobScheduler 中提供保证的槽位,以防止在高负载下错过内容更新。可以通过 Configuration.Builder.setContentUriTriggerWorkersLimit 配置限制。(Ic128f)
  • 约束条件已添加到 WorkInfo。(I162c0)

2.8 版本

2.8.1 版本

2023年3月22日

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

错误修复

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

2.8.0 版本

2023年2月8日

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

自 2.7.0 版本以来的重要更改

新功能

API 更改

  • 添加了 WorkManager.updateWork 以更新工作并保留其原始入队时间和链。(I9a248b/219446409)
  • 添加了 ExistingPeriodicWorkPolicy.UPDATE。此策略允许按名称更新周期性工作。它类似于现有的 REPLACE,但侵入性较小:如果 worker 当前正在运行,它不会取消 worker,并且它保留入队时间 - 初始延迟和周期是从原始入队时间计算的,而不是更新时间。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)
  • getForegroundInfo 添加到 Worker。(Ic1ead)
  • RxJava 2 和 RxJava 3 的 RxWorker 现在都有 setForeground 返回 Completable,可以替代返回 ListenableFuturesetForegroundInfoAsync
  • RxJava 2 和 RxJava 3 的 RxWorker 都有 getForegroundInfo 返回 Single,可以替代返回 ListenableFuturegetForegroundInfoAsync。(b/203851459)
  • 现在可以直接构造 Constraints,而不是使用 Constraints.Builder,这对 Kotlin 用户来说很方便。(Idc390b/137568653)
  • 添加了检查 WorkManager 是否已初始化的功能。此外,还为库开发者添加了一个新的 getConfiguration() API,用于获取 WorkManager 初始化时使用的配置。(I6eff3b/212300336)

错误修复

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

2.8.0-rc01 版本

2022年12月7日

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

新功能

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

2.8.0-beta02 版本

2022年11月9日

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

错误修复

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

2.8.0-beta01 版本

2022年10月5日

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

错误修复

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

2.8.0-alpha04 版本

2022年9月7日

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

API 更改

  • 新增了 WorkerInfo.getGeneration()WorkerParameters.getGeneration() 方法,用于返回工作者的代数。如果工作者通过 WorkManager.updateWorkWorkManager.enqueueUniquePeriodicWork 使用 ExistingPeriodicWorkPolicy.UPDATE 更新过,则它可能有多个代数。请注意,如果工作者当前正在运行,并且在执行过程中发生了更新,则此方法可能会返回比当前运行的工作者更新的代数。(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。(Ie542eb/238790278)

版本 2.8.0-alpha02

2022年4月6日

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

API 更改

  • 现在可以直接构造约束,而无需使用 Builder,这对 Kotlin 用户来说很方便。(Idc390b/137568653)
  • 添加了检查 WorkManager 是否已初始化的功能。此外,还为库开发者添加了一个新的 getConfiguration() API,用于获取初始化 WorkManager 时使用的配置。(I6eff3b/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。(If48f2b/199919736)
  • 为将来的 SDK 添加了实验性的 BuildCompat 方法(Iafd82b/207528937)
  • Worker 添加了 getForegroundInfo。(Ic1ead)
  • 添加了辅助方法 WorkQuery.fromIds 以直接从 ID 创建 WorkQuery。(Ie5bdfb/199919736)
  • RxWorker 现在有 setForeground 返回 Completable,可以替代返回 ListenableFuturesetForegroundInfoAsync。(I85156)
  • 适用于 RxJava 2 的 RxWorker 现在有 getForegroundInfo 返回 Single,可以替代返回 ListenableFuturegetForegroundInfoAsync。(I21c91b/203851459)
  • 适用于 RxJava 3 的 RxWorker 现在有 getForegroundInfo 返回 Single,可以替代返回 ListenableFuturegetForegroundInfoAsync。(I1ca8a)
  • RxWorker 现在有 setForeground 返回 Completable,可以替代返回 ListenableFuturesetForegroundInfoAsync。(I992a3b/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 开始委托给 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)

错误修复

  • 为未实现 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 标记为紧急 (expedited)

    此 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
  • setProgressAsync() 提供多进程 Worker 支持。(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,该 API 返回 ListenableWorker 的 outputData。(Ie51e3

错误修复

  • 添加了解决方案,用于解决使用 AlarmManager API 时抛出 SecurityException 的 OEM 错误。(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 完成后跟踪 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版本包含这些提交。

新功能

  • 添加了一个API到WorkQuery,可以使用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转发到primary应用程序进程,并返回流畅的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的大小限制)。这意味着当应用程序处于前台时,应用程序现在可以执行更多WorkRequests。为了管理在前台执行延迟工作,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

  • 修复了一个bug,该bug导致WorkManager尝试执行绑定到前台服务的Worker的多个实例(b/156310133aosp/1309853

2.4.0-rc01版本

2020年6月24日

发布了androidx.work:work-*:2.4.0-rc012.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-beta012.4.0-beta01版本包含这些提交。

错误修复

  • 修复了一个错误,即在前台Worker中断后,ForegroundService未停止。(b/155579898aosp/1302153
  • 修复了一个bug,该bug导致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-alpha032.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-alpha022.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-alpha012.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.42.3.4版本包含这些提交。

错误修复

  • 修复了一个bug,该bug会导致在超过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.32.3.3版本包含这些提交。

错误修复

2.3.2版本

2.3.2版本

2020年2月19日

发布了androidx.work:work-*:2.3.22.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.12.3.1版本包含这些提交

错误修复

  • 更好地管理在活动前台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-rc012.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-beta022.3.0-beta02 版本包含以下提交

新特性

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

API 变更

  • 使用 ListenableWorker.setForegroundAsync() 时,ForegroundInfo 现在要求您指定要使用的 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-beta012.3.0-beta01 版本包含以下提交

新特性

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

2.3.0-alpha03 版本

2019 年 10 月 23 日

已发布 androidx.work:work-*:2.3.0-alpha032.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-alpha022.3.0-alpha02 版本包含以下提交

新特性

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

API 变更

  • Data 中的 containsKey API 已重命名为 hasKeyWithValueOfType。ktx 库中的相应扩展方法也已重命名。(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,工作者可以通过具有相应 getProgress API 的 WorkInfo 传达进度信息。(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 已发布。此版本中包含的提交可以在这里找到 here

错误修复

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

2.1.0-beta02 版本

2019 年 6 月 20 日

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

错误修复

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

2.1.0-beta01 版本

2019 年 6 月 13 日

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

错误修复

  • 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.keepResultsForAtLeastb/130638001)、按需初始化和PeriodicWorkRequest.Builderb/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
  • 修复了处理长工作链时出现的StackOverflowErrorb/129091233
  • 更新了PeriodicWorkRequest的文档,以指示在 API 23 上不支持灵活时间。
  • 修复了 Kotlin 文档中一些损坏的链接。

2.0.0 版本

2.0.0 版本

2019 年 3 月 20 日

WorkManager 2.0.0 已发布。此版本与 2.0.0-rc01 相同,是具有 AndroidX 依赖项的 1.0.0 稳定版本的 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
  • 修复了处理长工作链时出现的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 稳定版本的第二个候选版本。此版本包含两个错误修复。

错误修复

  • 应用程序崩溃后,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 会泄漏 Wakelocks 的情况。

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 中其余的 varargs 方法,以简化 API。要修复任何构建问题,您可以使用 Arrays.asList(...) 包装现有的 varargs。我们仍然包含每个方法的单参数版本。这是一个破坏性更改。
  • 删除了 WorkContinuation.combine(OneTimeWorkRequest, *) 变体。它们呈现了一个令人困惑的 API;现有的 combine 方法更容易理解。这是一个破坏性更改。

错误修复

  • 棉花糖之前的实现现在在恢复已执行任务的进程死亡方面更加可靠。
  • 通过 observeForever 观察到的 LiveData 通过 WorkManager 进行跟踪。这是 Room 库修复程序的反向移植。b/74477406
  • Data.Builder.build() 现在如果序列化对象超过其最大大小,则会抛出异常。这以前只会发生在后台线程上,您无法正确处理它。
  • 进一步区分了停止与取消的工作;getWorkInfoById() 将在 ListenableWorker.onStopped() 期间返回具有 CANCELLED StateWorkInfo
  • ListenableWorker 中将 null Result 视为失败。b/120362353
  • 针对有时会抛出 IllegalArgumentException 的运行 API 24 的 Shield 平板电脑的推测性修复。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。要修复任何构建问题,您可以使用 Arrays.asList(...) 包装现有的 varargs。我们仍然包含每个方法的单参数版本。
  • 删除了 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 的设置器不再是公共 API 的一部分。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 以前返回数组。现在这些方法返回集合。
  • ListenableWorker.onStartWork() 已重命名为 ListenableWorker.startWork()
  • WorkStatus 的构造函数不再是公共 API 的一部分。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()
  • WorkManager 上所有 enqueuecancel 方法的变体现在返回新的 Operation 类型。
  • 所有 enqueue 变体不再接受 WorkRequest 的可变参数。
  • 尝试对每个进程多次初始化 WorkManager 现在将导致 IllegalStateException

版本 1.0.0-alpha10

2018年10月11日

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

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

API 更改

  • 删除所有以前已弃用的方法和类,特别是默认的 Worker 构造函数。这是一个重大的 API 变更。
  • NonBlockingWorker 重命名为 ListenableWorker,它现在是一个未隐藏的公共类,可以随时使用。
    • ListenableWorker 提供对一个抽象方法 ListenableFuture onStartWork() 的访问,该方法在主线程上调用。由您负责异步启动和处理工作。完成后,应适当地更新 ListenableFutureListenableFuture 的参考实现位于 alpha02 中的 Futures 包中(请参见下面的 WorkManager 部分)。
    • Worker 扩展 ListenableWorker,并且仍然像以前一样运行,具有一个抽象的 Result doWork() 方法。
    • 将一些方法和成员从 Worker 移至 ListenableWorker
    • 我们很快将提供使用 Kotlin 协程(一旦发布稳定版本)和 RxJava2 的 ListenableWorker 的参考实现。
  • WorkerFactory 接口和具体实现 DefaultWorkerFactory 已合并到名为 WorkerFactory 的抽象类中。该实现确保将基于反射的默认行为作为任何用户创建的 WorkerFactory 实例的最后手段调用。这是一个重大的更改。
  • 删除了 WorkManager.synchronous()WorkContinuation.synchronous() 及所有相关方法。添加 ListenableFuture 作为 API 中许多方法的返回类型。这是一个重大的 API 变更。
    • 您现在可以使用 ListenableFuture 同步获取和观察。例如,WorkManager.enqueue() 以前返回 void;现在它返回 ListenableFuture。您可以调用 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日

已知问题

如果您遇到以下问题:“找到多个具有与操作系统无关的路径 '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 更改

  • 您现在可以通过将 WorkerFactory 指定为 WorkManager.Configuration 的一部分来在运行时创建您自己的 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) 以与现有 API 保持一致。

版本 1.0.0-alpha06

2018年8月1日

错误修复

  • 在调度工作时防止数据库锁定。b/111801342
  • 修复了在休眠模式下导致 PeriodicWork 未按计划运行的错误。b/111469837
  • 修复了跟踪约束时的竞争条件,该条件会导致 WorkManager 崩溃。googlecodelabs/android-workmanager/issues/56
  • 使用WorkRequest.Builder#build()时,请创建唯一的WorkRequestb/111408337
  • 只有当存在需要RescheduleReceiverWorkRequest时,才启用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()如果请求任何类型的停止,则返回trueWorker.isCancelled()当工作被明确取消时返回trueb/79632247
  • 在API 28上添加了对JobParameters#getNetwork()的支持。这通过Worker.getNetwork()公开。
  • 添加了Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit),以便您可以强制执行可以发送到JobSchedulerAlarmManager的作业数量。这有助于防止WorkManager占用所有可用的JobScheduler槽位。
  • 添加了Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId),这有助于定义JobScheduler作业ID的范围,以确保WorkManager可以使用。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
  • Data中添加了对float的支持。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