WorkManager

使用 WorkManager API 可以轻松地调度那些必须可靠运行的可延期异步任务。通过这些 API,您可以创建任务并提交给 WorkManager,以便在满足工作约束条件时运行。
最近更新时间 稳定版 候选版 Beta 版 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 文档

如需详细了解依赖项,请参阅添加 build 依赖项

反馈

您的反馈将帮助我们改进 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 指定为工作器的约束条件。这样,您就可以更精细地控制此工作器应运行在哪个网络上。
  • 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 变更

  • 添加了因执行超时而导致前台 worker 停止运行时(基于前台服务类型)的停止原因 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 进行编译。
  • 修复了以下问题:当 WorkManager 未调用 stopSelf() 时,类型为“short service”和“data sync”的前台 worker 会超时并导致 ANR。此修复仅适用于引入前台服务类型的 API 34 和 35 设备。(ca06b2b/364508145
  • 新增了 WorkerParameters API,可在使用 WorkerFactory 时切换 Worker 绑定的远程进程。(Ibdc8aIe8a90I7373f

bug 修复

  • 修复了以下问题:当工作任务的前台类型的 Android 14 前提条件权限被撤消时,WorkManager 尝试重启长时间运行的工作器(即前台工作器)而导致崩溃。(b/333957914)
  • 移除了手动说明对新平台 API 的访问权限,因为当将 R8 与 AGP 7.3 或更高版本(例如 R8 版本 3.3)搭配使用时,系统会通过 API 建模自动执行此操作;当使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)时,系统会针对所有 build 自动执行此操作。建议不使用 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)
  • 现在,可以使用 KClass(而非 Class)构造 OneTimeWorkRequest.BuilderPeriodicWorkRequest.Builderval request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() (Ib55f6)
  • WorkManager 类已迁移到 Kotlin。现在,返回 LiveDataListenableFutureFlow 的方法会提供正确的可为 null 性信息。如果客户端源代码中的可为 null 性假设不正确,则可能需要对客户端源代码进行更改。(If6757)

版本 2.10.0-alpha01

2024 年 1 月 24 日

发布了 androidx.work:work-*:2.10.0-alpha01版本 2.10.0-alpha01 中包含这些提交内容

新功能

  • 开发者可以通过 Constraints.setRequiredNetworkRequest 方法将 NetworkRequest 指定为工作器的约束条件。这样,您就可以更精细地控制此工作器应在哪个网络上运行。

API 变更

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

版本 2.9

版本 2.9.1

2024 年 8 月 7 日

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

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-s 实现可观测性。现在,可以通过 Flow 的 WorkManager.getWorkInfosFlow 和类似方法观察 worker 的进度,而不是使用 LiveData
  • 现在,WorkManager 会提供有关之前工作器停止的原因的提示。您可以通过 getStopReason() 方法从工作器本身查询该值,也可以通过 getStopReason()WorkInfo 查询该值。
  • 通过 setNextScheduleTimeOverride 精确调度定期工作器。这样,系统就可以动态计算下一个定期作业时间表,从而实现自适应刷新时间、自定义重试行为等高级功能,或者在用户每天早上醒来之前运行动态信息流 worker,而不会出现偏差。ExistingPeriodicWorkPolicy.UPDATE 应与这些技术搭配使用,以避免在调度下一个 worker 时取消当前正在运行的 worker。
  • 使用与生产环境匹配的线程进行 WorkManager 测试。ExecutorsMode.PRESERVE_EXECUTORS 可在 initializeTestWorkManager 中使用,以保留在 Configuration 中设置的执行器并使用真实的主线程。
  • CoroutineWorker 等协程 API 已从附加工件 work-runtime-ktx 移至主工件 work-runtime。work-runtime-ktx 现在为空。

API 变更

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

API 变更

  • 已将 stopReason 添加到“WorkInfo”。它会在工作器运行后提供 stopReason。这有助于以可用的方式报告 stopReason,因为一旦 worker 停止,应用本身可能会非常快地被终止。(I21386)
  • 允许通过配置设置时钟,并将其用于驱动 Worker 测试的执行顺序。(Ic586e
  • ListenableWorker 添加了 getStopReason() 方法,该方法会提示工作器停止的原因。(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 实现可观测性。现在,您可以通过 Flow 的 WorkManager.getWorkInfosFlow 和类似方法观察 Worker 的进度,而不是通过 LiveData
  • 通过 setNextScheduleTimeOverride 精确安排定期工作器。这样,系统就可以动态计算下一个定期作业时间表,从而实现自适应刷新时间、自定义重试行为等高级功能,或者在用户每天早上醒来之前运行动态信息流 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 通过流观察 worker 的方法 (If122a)
  • 向 Constraints 的构造函数和属性添加了缺少的 @RequiresApi(...) 注解。它们现在与 WorkManager 早期版本中 Constraints.Builder 的 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,用于更新工作并保持其原始排队时间和工作链。(I9a248b/219446409
  • 添加了 ExistingPeriodicWorkPolicy.UPDATE。此政策允许按名称更新定期工作。它与现有的 REPLACE 类似,但干扰性更小:它不会取消目前正在运行的工作器并且会保持排队时间 - 初始延迟和期间是根据原始排队时间(而非更新时间)计算的。废弃了 REPLACE,以缓解名称非常类似的 REPLACEUPDATE 之间发生混淆的问题。如果您仍想保留 REPLACE 的旧语义,则可以使用新添加的 CANCEL_AND_REENQUEUE,它与 REPLACE 相同。(I985edb/219446409
  • 添加了通过 setSchedulingExceptionHandler 拦截提供 Consumer<Throwable> 的调度异常的功能
  • 添加了通过 setInitializationExceptionHandler 提供 Consumer<Throwable> 的功能,以确定尝试初始化 WorkManager 时是否存在问题。
  • OneTimeWorkRequestPeriodicWorkRequest 的内嵌帮助程序已从 androidx.work:work-runtime-ktx 移至 androidx.work:work-runtimeI0010fb/209145335
  • 添加了 WorkQuery.fromIdsWorkQuery.fromStatesWorkQuery.fromUniqueWorkNamesWorkQuery.fromTags 辅助方法,以直接创建 WorkQuery。(b/199919736)(If48f2b/199919736
  • Worker 添加了 getForegroundInfo。(Ic1ead)
  • 适用于 RxJava 2 和 RxJava 3 的 RxWorker 现在具有返回 CompletablesetForeground,可用于代替返回 ListenableFuturesetForegroundInfoAsync
  • 适用于 RxJava 2 和 RxJava 3 的 RxWorker 具有返回 SinglegetForegroundInfo,可用于代替返回 ListenableFuturegetForegroundInfoAsync。(b/203851459)
  • 现在可以直接构建约束条件而无需使用 Constraints.Builder,这对于 Kotlin 用户非常方便。(Idc390b/137568653
  • 添加了检查 WorkManager 是否已初始化的功能。此外,还为库开发者添加了新的 getConfiguration() API,用于获取 WorkManager 进行初始化时使用的配置。(I6eff3b/212300336

bug 修复

  • 修复了 GreedyScheduler 在工作器处于负载状态时会阻止其立即运行的问题。(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-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 修复

  • 修复了 GreedyScheduler 在工作器处于负载状态时会阻止其立即运行的问题。(I9686bb/248111307

版本 2.8.0-alpha04

2022 年 9 月 7 日

发布了 androidx.work:work-*:2.8.0-alpha04版本 2.8.0-alpha04 中包含这些提交内容

API 变更

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

版本 2.8.0-alpha03

2022 年 8 月 10 日

发布了 androidx.work:work-*:2.8.0-alpha03版本 2.8.0-alpha03 中包含这些提交内容

新功能

  • 添加了以非干扰性方式更新 WorkRequests 的功能,以保持原始排队时间、工作链等。如需了解详情,请参阅 WorkManager.updateWorkExistingPeriodicWorkPolicy.UPDATE

API 变更

  • 添加了 WorkManager.updateWork,用于更新工作并保持其原始排队时间和工作链。(I9a248b/219446409
  • 添加了 ExistingPeriodicWorkPolicy.UPDATE。此政策允许按名称更新定期工作。它与现有的 REPLACE 类似,但干扰性更小:它不会取消目前正在运行的工作器并且会保持排队时间 - 初始延迟和期间是根据原始排队时间(而非更新时间)计算的。废弃了 REPLACE,以缓解名称非常类似的 REPLACEUPDATE 之间发生混淆的问题。如果您仍想保留 REPLACE 的旧语义,则可以使用新添加的 CANCEL_AND_REENQUEUE,它与 REPLACE 相同。(I985edb/219446409
  • 添加了通过定义 SchedulingExceptionHandler 来拦截调度异常的功能。(I033eb)
  • OneTimeWorkRequestPeriodicWorkRequest 的内嵌帮助程序已从 androidx.work:work-runtime-ktx 移至 androidx.work:work-runtimeI0010fb/209145335

bug 修复

  • 向在 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 变更

  • 现在可以直接构建约束条件而无需使用构建器,这对于 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 现在具有返回 CompletablesetForeground,可用于代替返回 ListenableFuturesetForegroundInfoAsync。(I85156)
  • 适用于 RxJava 2 的 RxWorker 现在具有返回 SinglegetForegroundInfo,可用于代替返回 ListenableFuturegetForegroundInfoAsync。(I21c91b/203851459
  • 适用于 RxJava 3 的 RxWorker 现在具有返回 SinglegetForegroundInfo,可用于代替返回 ListenableFuturegetForegroundInfoAsync。(I1ca8a)
  • RxWorker 现在具有返回 CompletablesetForeground,可用于代替返回 ListenableFuturesetForegroundInfoAsync。(I992a3b/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(...) 时,从 Android 12 开始,WorkManager 会在 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 变更

  • 移除了 @ExperimentalExpeditedWork API,因为适用于 Android 12 (S) 的底层平台 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 版的 bug 修复。

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

Version 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(...) 时,从 Android 12 开始,WorkManager 会在 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" />
    
  • 添加了对可在任何进程中运行的工作器的支持。(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/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 中包含这些提交内容

新功能

  • 添加了对可在任何进程中运行的工作器的支持。(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,该 API 会返回 ListenableWorker 的 outputData。(Ie51e3)

bug 修复

  • 针对会导致在使用 AlarmManager API 时抛出 SecurityException 的 OEM bug 添加了解决方法。(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 Inspector

版本 2.5.0-rc01

2021 年 1 月 13 日

发布了 androidx.work:work-*:2.5.0-rc01版本 2.5.0-rc01 中包含这些提交内容

bug 修复

  • 修复了以下 bug:使用基于 WorkQuery 的 API 时,getWorkInfosLiveData 无法在实体更新后正确失效。(aosp/1540566b/173769028
  • 修复了以下 bug:数据库事务在极少数情况下未标记为成功。此问题会导致部分 Motorola 设备出现问题。(aosp/1535368b/175944460
  • 修复了一个 bug,以便在尝试与已终止的进程取消绑定时忽略 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 中包含这些提交内容

bug 修复

  • 修复了 androidx.work:work-multiprocess 中的一个 bug:WorkManager 在尝试绑定到指定进程时无意中阻塞了发起调用的线程。(aosp/1475538)
  • 修复了以下 bug:未正确地协调 PeriodicWorkRequest。(b/172475041aosp/1489577
  • 添加了针对以下平台 bug 的解决方法:使用 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)

bug 修复

  • 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

bug 修复

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

版本 2.5.0-alpha02

2020 年 9 月 16 日

发布了 androidx.work:work-*:2.5.0-alpha02版本 2.5.0-alpha02 中包含这些提交内容

新功能

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

API 变更

  • 如果已经完成的 WorkRequest 没有任何未完成的依赖项,WorkManager 现在会更激进地删除这些工作请求。缓冲时长从 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,包括 PeriodicWorkRequest。进程内 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。
    • 目前正在运行的 WorkRequest。
    • 预定运行的 WorkRequest。(aosp/1235501)
  • 添加了 ExistingWorkPolicy.APPEND_OR_REPLACE,它与 APPEND 类似,但会替换已取消或不满足前提条件的链。(b/134613984aosp/1199640

  • 现在可以添加自定义 RunnableScheduler 以跟踪需要在将来执行的 WorkRequest。进程内调度程序会用到此功能。(aosp/1203944)

  • 添加了对以下情形的支持:在使用 DelegatingWorkerFactory 时,动态添加要委托的 Factory。(b/156289105aosp/1309745

  • 使对 BATTERY_NOT_LOW 约束条件的跟踪与本平台更贴近。(aosp/1312583)

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

  • 确保执行以下操作的新 lint 规则:

    • 在使用 setForegroundAsync() API 时使用正确的 foregroundServiceType。(b/147873061aosp/1215915
    • 指定 WorkManager 在直接使用 JobService API 时应使用的 JobScheduler ID。aosp/1223567
    • 新增了一个 lint 规则,该规则可确保使用默认 WorkerFactoryListenableWorker 实现现在处于 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 时,动态添加要委托的 Factory。(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 规则,该规则可确保使用默认 WorkerFactoryListenableWorker 实现现在处于 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 修复

  • 修复了用于检查 PeriodicWorkRequest 的无效间隔时长的 lint 规则。(aosp/1254846b/152606442

版本 2.4.0-alpha01

2020 年 3 月 4 日

发布了 androidx.work:work-*:2.4.0-alpha01版本 2.4.0-alpha01 中包含这些提交内容

新功能

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

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

    • 在过去 24 小时内完成的 WorkRequest。
    • 目前正在运行的 WorkRequest。
    • 预定运行的 WorkRequest。(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)

bug 修复

  • 弃用了 RxWorker 中的 setProgress(),因为此方法之前会返回一种无法实现的类型 Single<Void>。新增了一个 API,即 setCompletableProgress(),它会返回 Completable;并且添加了新的 Lint 规则,以帮助迁移到新的 API。(b/150080946aosp/1242665

版本 2.3.4

版本 2.3.4

2020 年 3 月 18 日

发布了 androidx.work:work-*:2.3.4版本 2.3.4 中包含这些提交内容

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

版本 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
  • 修复了 ConstraintController 中的竞态条件问题。(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 修复

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

版本 2.3.0

版本 2.3.0

2020 年 1 月 22 日

发布了 androidx.work:work-*:2.3.0,该版本与 2.3.0-rc01 相比没有变化。版本 2.3.0 中包含这些提交内容

自 2.2.0 以来的重要变更

  • 通过 ListenableWorker#setForegroundAsync() 实现了对长时间运行的工作或重要工作的支持。
  • 通过 ListenableWorker#setProgressAsync() 实现了对 Worker Progress 的支持。
  • 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 工件现在可定义依赖于 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 规则,该规则可确保在使用按需初始化时从 AndroidManifest.xml 中移除内容提供器 androidx.work.impl.WorkManagerInitializer。(aosp/1167007)
  • 添加了一个 lint 警告,当将 enqueue() 用于 PeriodicWorkRequest 而非 enqueueUniquePeriodicWork() 时,系统会就会发出此警告。(aosp/1166032)

API 变更

  • ForegroundInfo 现在要求您指定要与 ListenableWorker.setForegroundAsync() 一起使用的 notificationId这是一项重大变更。 这样,您就可以同时运行多个长时间运行的 Worker。此外,WorkManager 还可更好地管理所提供的 Notification 的生命周期。(b/145473554aosp/1181208asop/1181216asop/1183577

bug 修复

  • 修复了 AlarmManager 实现中无法正确清除警报的 bug。(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,使得无需在 AndroidManifest.xml 中注册其他组件即可轻松取消 WorkRequest。使用此 API,可以非常轻松地从 Notification 取消 WorkRequest。我们预计这将与 2.3.0 中的新前台 API 配对使用。
  • 现在,WorkManager 依赖于 androidx.room:*:2.2.0 稳定版。

API 变更

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

bug 修复

  • 修复了由于在事务之外对 setTransactionSuccessful() 进行不必要的调用而导致的 bug。在极少数的迁移过程中会发生这种情况。(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)
  • 现在,当 Worker 中断或达到其终止状态时,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 中添加了 setProgress,后者会返回 Single<Void>。借助这些新的 API,Worker 可以通过具有相应的 getProgress API 的 WorkInfo 传达进度信息。(b/79481554)
  • Data 具有 containsKey() API,可用于验证 Worker 的输入数据是否具有预期类型的键。(b/117136838)
  • 现在可以使用 Data.toByteArray()Data.fromByteArray()Data 进行序列化处理。请注意,不保证对 Data 进行版本控制,因此您不应将其持久保留或用于不同应用之间的 IPC。您只能在同一应用的多个进程之间放心地使用它们。
  • 添加了通过 Configuration.setInputMergerFactory 指定 InputMergerFactory 的功能。(b/133273159)

API 变更

  • 如果 WorkerFactory 返回先前调用的 ListenableWorker 实例,WorkManager 将抛出 IllegalStateException 实例。(b/139554406)
  • 围绕 ListenableFuture 取消和 ListenableWorker 中的 onStopped() 回调进行了文档更新。(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.1.0 到 2.2.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 实现中的一个 bug,在极少数情况下该 bug 会导致服务过早关闭,致使出现 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.gradlekotlinOptions { 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。点击此处可查看此版本中包含的提交内容。

bug 修复

  • 修复了在备份进行中使用 JobScheduler 执行作业时会导致应用崩溃的问题 b/135858602

版本 2.1.0-beta02

2019 年 6 月 20 日

发布了 androidx.work:work-*:2.1.0-beta02。点击此处可查看此版本中包含的提交内容。

bug 修复

  • 现在,TestListenableWorkerBuilder 在创建 ListenableWorker 的实例时会使用正确的 WorkerFactoryb/135275844
  • 修复了由于进程终止而导致在 WorkRequest 的执行窗口中偏移的 bug。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)
  • 解决了在使用 WorkManager 调度作业时,JobScheduler 实现中出现的原始设备制造商 (OEM) 特有问题。
  • 围绕先前导致罕见崩溃问题的服务生命周期对基于 AlarmManager 的调度程序进行了改进。(b/133313734)

版本 2.1.0-alpha02

2019 年 5 月 16 日

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

API 变更

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

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

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

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

版本 2.1.0-alpha01

2019 年 4 月 24 日

发布了 WorkManager 2.1.0-alpha01。此版本包含几个新的 API。请注意,从此版本开始,将有一些新功能不会向后移植到 1.x 版本。我们建议改用 2.x。

API 变更

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

版本 2.0.1

版本 2.0.1

2019 年 4 月 9 日

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

版本 2.0.1-rc01

2019 年 4 月 3 日

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

bug 修复

  • 现在可利用 WorkManager 正常运行 Robolectric 测试。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 依赖项的 AndroidX 版的 1.0.0 稳定版。我们建议以此版本(而不是旧版 1.x)为目标版本。所有活跃的开发都将以 2.x 为目标版本,而 1.x 将只在有限的时间内收到重大 bug 修复。

版本 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。此版本修复了一些 bug。

bug 修复

  • 现在可利用 WorkManager 正常运行 Robolectric 测试。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 稳定版的第二个候选版本。此版本修复了 2 个 bug。

bug 修复

  • 现在,在应用崩溃后会正确调度 Workerb/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。

bug 修复

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

版本 1.0.0-beta04

2019 年 2 月 4 日

此版本修复了一些 bug。

bug 修复

  • 针对基于 AlarmManager 的实现改进了 PeriodicWork 的调度。
  • 修复了使用基于 AlarmManager 的实现时 WorkManager 无法正确跟踪约束的问题。b/123379508
  • 修复了使用基于 AlarmManager 的实现时 WorkManager 无法在进程终止后重试工作的问题。b/123329850
  • 修复了使用基于 AlarmManager 的实现时会导致 WorkManager 泄露 Wakelock 的问题。

版本 1.0.0-beta03

2019 年 1 月 25 日

此版本修复了一些 bug。

bug 修复

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

版本 1.0.0-beta02

2019 年 1 月 15 日

此版本修复了一些 bug。

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。

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 工件将不再更新。我们将考虑在未来添加它的替代品。
  • 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 方法更容易理解。这是一项重大变更。

bug 修复

  • 现在,在恢复已执行任务的终止进程时,版本低于 Marshmallow 的实现更加可靠。
  • 通过 observeForever 观察到的 LiveData 会通过 WorkManager 进行跟踪。这是 Room 库修复的向后移植。b/74477406
  • 如果序列化对象超过其大小上限,Data.Builder.build() 现在会抛出异常。之前这种情况只发生在后台线程,因此您无法正确处理这种问题。
  • 进一步区分了“停止”操作和“取消”操作,getWorkInfoById() 将在 ListenableWorker.onStopped() 期间返回具有 CANCELLED StateWorkInfo
  • ListenableWorker 中将 null Result 视为失败。b/120362353
  • 对运行 API 24 且有时抛出 IllegalArgumentException 的 Shield Tablets 进行了推测性修复。b/119484416

重要 API 更改

  • 由于即将废弃 Firebase JobDispatcher,因此停止了对它的支持。这意味着,当我们进入测试阶段时,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 日

此版本包含多项更改,它们将使 API 在 beta 版本中变得稳定。此版本包含重要的 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
  • 针对 WorkManagerenqueuecancel 方法的所有变体现在都会返回一个新的 Operation 类型。这是一项重大变更。
  • enqueue 的所有变体都不再接受 WorkRequest 的 varargs。这是一项重大变更。请改用集合。您可以使用 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() 之前会返回数组。现在,这些方法会返回集合。
  • 已将 ListenableWorker.onStartWork() 重命名为 ListenableWorker.startWork()
  • WorkStatus 的构造函数不再是公共 API 的一部分。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 已分别重命名为 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()
  • 针对 WorkManagerenqueuecancel 方法的所有变体现在都会返回一个新的 Operation 类型。
  • enqueue 的所有变体都不再接受 WorkRequest 的 varargs。
  • 在一个进程中尝试多次 initialize WorkManager 现在会导致出现 IllegalStateException

版本 1.0.0-alpha10

2018 年 10 月 11 日

此版本支持开发者控制的异步工作。此版本包含重要的 API 更改,请参阅下面的“重要 API 更改”部分。

我们预计 WorkManager 正在进入其 alpha 版本期间的最后阶段。我们希望在 Beta 版中使 API 变得稳定,因此请花一些时间在我们的问题跟踪器上提交反馈。

API 变更

  • 移除了所有之前的 deprecated 方法和类,尤其是默认的 Worker 构造函数。这是一项重要的 API 变更。
  • NonBlockingWorker 已重命名为 ListenableWorker,它现在是一个未隐藏的公共类,随时可供使用。
    • 通过 ListenableWorker 可以访问一个在主线程上调用的抽象方法,即 ListenableFuture<Payload> onStartWork()。异步启动和处理工作由您负责执行。完成后,您应该适当地更新 ListenableFutureListenableFuture 的参考实现在 alpha02Futures 软件包中提供(请参阅下面的 WorkManager 部分)。
    • Worker 扩展了 ListenableWorker,它使用抽象的 Result doWork() 方法,仍然像以前那样运行。
    • 将一些方法和成员从 Worker 转移到了 ListenableWorker
    • 我们应该很快就会提供 ListenableWorker 的参考实现,这些实现使用 Kotlin 协程(发布稳定版本后)和 RxJava2。
  • 将接口 WorkerFactory 和具体实现 DefaultWorkerFactory 合并到了一个名为 WorkerFactory 的抽象类中。该实现可确保,对于任何用户创建的 WorkerFactory 实例,调用默认的基于反射的行为是最后的尝试。这是一项重大变更。
  • 移除了 WorkManager.synchronous()WorkContinuation.synchronous() 以及所有相关方法。添加了 ListenableFuture<Void> 作为 API 中许多方法的返回类型。这是一项重要的 API 变更。
    • 您现在可以使用 ListenableFuture 同步获取和观察。例如,WorkManager.enqueue() 过去返回 void,而现在则返回 ListenableFuture<Void>。操作完成后,您可以调用 ListenableFuture.addListener(Runnable, Executor)ListenableFuture.get() 来运行代码。
    • 请注意,这些 ListenableFuture 不会告知您操作是成功还是失败,而只会告知您操作已完成。您仍需要关联 WorkManager 方法来获取这项信息。
    • 我们会忽略对这些对象的 cancel() 调用,因为它们令人困惑且难以推断(您是要取消操作本身还是取消操作的结果?)。这在 Future 的规定范围内。
    • 为了与同步的 getStatus* 方法保持对等,我们提供了 ListenableFuture 变体,并对返回 LiveData 的现有变体进行了重命名,明确地将“LiveData”作为名称的一部分(例如,getStatusesByIdLiveData(UUID))。这是一项重要的 API 更改。

bug 修复

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

重要 API 更改

  • 移除了所有之前的 deprecated 方法和类,尤其是默认的 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")
    }
}

bug 修复

  • 添加了“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 依赖项)。我们将在即将发布的版本中向 API 引入 ListenableFutures。此更改将支持最终取消隐藏 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) 的返回值类型注解更改为 @Nullable 而不是 @NonNullb/112275229

API 变更

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

版本 1.0.0-alpha06

2018 年 8 月 1 日

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
  • 修复了使用 JobScheduler 时的 PeriodicWorkRequest 双重调度问题。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
  • 修复了在强行停止或重新启动后重新调度所有 Worker 时出现的潜在 ANR 问题。b/110507716
  • 向各种 WorkManager API 添加了可为 null 性注解。b/110344065
  • 记录在 Worker 线程执行期间发生的未捕获异常。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() 将返回 true。显式取消工作进程后,Worker.isCancelled() 将返回 trueb/79632247
  • 在 API 28 上添加了对 JobParameters#getNetwork() 的支持。这通过 Worker.getNetwork() 公开。
  • 添加了 Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit),这样便可强制规定可以将多少作业发送到 JobSchedulerAlarmManager。这有助于防止 WorkManager 占用所有可用的 JobScheduler 插槽。
  • 添加了 Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId),它有助于定义 WorkManager 尽可放心使用的一系列 JobScheduler 作业 ID。b/79996760
  • Worker.getRunAttemptCount() 返回给定 Worker 的当前运行计数。b/79716516
  • 通过 WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork),可以将唯一的 PeriodicWorkRequest 加入队列。b/79600647
  • WorkManager.cancelAllWork() 会取消所有 Worker。依赖于 WorkManager 的库可以使用 WorkManager.getLastCancelAllTimeMillis() 查询上次调用此方法的时间,以便对内部状态进行额外的清理。
  • 添加了 WorkManager.pruneWork() 以从内部数据库中移除完成的作业。b/79950952b/109710758

行为变更

  • 为所有 WorkRequest 添加了一个隐式标记,它是 Worker 的完全限定类名。这样便能够在没有 tag 的情况下或在 id 不可用时移除 WorkRequestb/109572351

重大变更

  • 已将 Worker.WorkerResult 重命名为 Worker.Result
  • Worker.onStopped 现在有一个额外的 isCancelled 参数,显式取消 Worker 后,该参数将设置为 true

版本 1.0.0-alpha02

2018 年 5 月 24 日

bug 修复

  • 修复了在 State.isFinished() 时出现的 NullPointerExceptionb/79550068
  • 修复了导致在 Application.onCreate() 时重新调度 Worker 的问题。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
  • 为 API 添加了 javax.time.Duration 过载,它接受时长和 TimeUnit 的组合。受 @RequiresApi(26) 保护。
  • WorkManager 扩展从 androidx.work.ktx 软件包移到了 androidx.work 软件包。废弃了旧的扩展,将在以后的版本中将其移除。
  • 废弃了 Configuration.withExecutor()。请改用 Configuration.setExecutor()

版本 1.0.0-alpha01

2018 年 5 月 8 日

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