WorkManager
| 最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
|---|---|---|---|---|
| 2025 年 10 月 22 日 | 2.11.0 | - | - | - |
声明依赖项
如需添加 WorkManager 的依赖项,您必须将 Google Maven 代码库添加到项目中:
在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
Groovy
dependencies { def work_version = "2.11.0" // (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.11.0" // (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.11
版本 2.11.0
2025 年 10 月 22 日
发布了 androidx.work:work-*:2.11.0。版本 2.11.0 中包含这些提交内容。
自 2.10.0 以来的重要变更:
minSdk已从 API 21 更新为 API 23。WorkManager的配置构建器中添加了 APIsetRemoteSessionTimeoutMillis,用于配置RemoteWorkManager会话从上次使用开始的存活时间。
版本 2.11.0-rc01
2025 年 10 月 8 日
发布了 androidx.work:work-*:2.11.0-rc01。版本 2.11.0-rc01 包含这些提交内容。
版本 2.11.0-beta01
2025 年 9 月 24 日
发布了 androidx.work:work-*:2.11.0-beta01。版本 2.11.0-beta01 包含这些提交内容。
API 变更
- 将
stopRunningWorkWithReason添加到WorkManagerTestDriver。(Ie53b2、b/439955564)
bug 修复
- 修复了存在待处理命令时前台服务停止的问题(Iae822、b/432069314)
- 修复了远程协程工作器无法取消绑定远程服务的问题 (I842f2, b/247113322)
版本 2.11.0-alpha01
2025 年 8 月 27 日
发布了 androidx.work:work-*:2.11.0-alpha01。版本 2.11.0-alpha01 包含这些提交内容。
API 变更
- minSdk 已从 API 21 更新为 API 23(Ibdfca、b/380448311、b/435705964、b/435705223)
- 在 WorkManager 的配置构建器中添加了 API
setRemoteSessionTimeoutMillis,以支持配置 RemoteWorkManager 会话从上次使用开始的存活时间。(Ib23c8) - 在
WorkRequest.Builder中添加了一个实验性 API,以便在工作被系统中断时应用退避。(Ie2dc7、b/335513480) - 添加了测试 API,用于将与正在构建的 worker 类不同的 worker 类传递给
TestListenableWorkerBuilder,以支持自定义WorkerFactory实现(If6bff、b/389154854)
bug 修复
- 在
SharedNetworkCallback中缓存网络功能,以防止不必要的 IPC(Ie4027、b/427115602) - 修复了网络约束评估方面的问题,即第一个工作项之后的后续工作项不会获取当前的网络功能,而是在超时后命中
ConstraintsNotMet(Ib6a66、b/427115602)
版本 2.10
版本 2.10.5
2025 年 9 月 24 日
发布了 androidx.work:work-*:2.10.5。版本 2.10.5 中包含这些提交内容。
bug 修复
- 修复了存在待处理命令时前台服务停止的问题(Iae822、b/432069314)
版本 2.10.4
2025 年 9 月 10 日
发布了 androidx.work:work-*:2.10.4。版本 2.10.4 中包含这些提交内容。
bug 修复
- 修复了
RemoteCoroutineWorker无法取消绑定远程服务的问题(I842f2、b/247113322)
版本 2.10.3
2025 年 7 月 30 日
发布了 androidx.work:work-*:2.10.3。版本 2.10.3 中包含这些提交内容。
bug 修复
- 修复了以下问题:与之前的工作器具有相同网络限制的工作器会报告其限制未得到满足。(b/427115602)。
版本 2.10.2
2025 年 6 月 18 日
发布了 androidx.work:work-*:2.10.2。版本 2.10.2 中包含这些提交内容。
bug 修复
- 修复了以下问题:在持久保存具有网络请求和默认功能的工作器时,会导致已移除的功能被重新添加,从而导致具有网络限制的工作器出现异常行为。(b/409716532)
- 修复了以下 bug:即使网络和功能可用,具有网络限制的工作器也会因未满足限制而无法及时执行。(b/423403088)
版本 2.10.1
2025 年 4 月 23 日
发布了 androidx.work:work-*:2.10.1。版本 2.10.1 中包含这些提交内容。
bug 修复
- 降低了因
WorkManager注册用于约束跟踪的NetworkCallback而抛出TooManyRequestsException的可能性。(b/231499040、b309d5)。
2.10.0 版
2024 年 10 月 30 日
发布了 androidx.work:work-*:2.10.0。版本 2.10.0 中包含这些提交内容。
自版本 2.9.1 以来的重大变更
- 为来自
WorkManager的作业添加了轨迹标记,这使得“adb shell dumpsys jobscheduler”更容易理解,因为它将包含正在执行的 Worker 的名称。还在WorkManager的关键区域周围添加了轨迹部分。 - 添加了
Configuration.workerCoroutineContext,用于控制执行CoroutineWorker的调度程序。 - 开发者可以通过
Constraints.setRequiredNetworkRequest方法指定NetworkRequest作为工作器的限制。这样可以更精细地控制此 worker 应在哪个网络中运行。 WorkManager2.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 进行编译。
- 修复了以下问题:当
WorkManager未调用stopSelf()时,“短服务”和“数据同步”类型的前台工作器超时并导致 ANR。此修复仅适用于引入了前台服务类型的 API 34 和 35 设备。(ca06b2、b/364508145) - 新增了
WorkerParametersAPI,可用于在使用WorkerFactory时切换Worker绑定的远程进程。(Ibdc8a、Ie8a90、I7373f)
bug 修复
- 修复了以下问题:当工作的“前台”类型具有已被撤消的 Android 14 前提条件权限时,
WorkManager尝试重启长时间运行的工作器(即前台工作器)会导致崩溃。(b/333957914) - 移除了对新平台 API 的访问权限进行手动概述的功能,这是因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 时,以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有 build 时,系统会通过 API 建模自动进行 API 访问权限概述。建议未使用 AGP 的客户更新到 D8 版本 8.1 或更高版本。如需了解更多详情,请参阅这篇文章。(Ia60e0、b/345472586)
版本 2.10.0-alpha02
2024 年 4 月 17 日
发布了 androidx.work:work-*:2.10.0-alpha02。版本 2.10.0-alpha02 中包含这些提交内容。
API 变更
- 添加了通过
WorkManager中可配置的@RestrictToTracer发出轨迹 span 的功能。(I17d7f、b/260214125) - 添加了
Configuration.workerCoroutineContext,用于控制执行CoroutineWorker的调度程序。这有助于完全避免在WorkManager中使用Dispatchers.Default。(Icd1b7) - 为 Worker 添加了自定义异常处理程序(Ib1b74、b/261190695)
OneTimeWorkRequest.Builder和PeriodicWorkRequest.Builder现在可以使用KClass而不是Class来构建:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()(Ib55f6)WorkManager类已迁移到 Kotlin。现在,返回LiveData、ListenableFuture或Flow的方法可提供正确的可为 null 性信息。如果客户端源代码中的可为 null 性假设不正确,则可能需要更改该代码。(If6757)
版本 2.10.0-alpha01
2024 年 1 月 24 日
发布了 androidx.work:work-*:2.10.0-alpha01。版本 2.10.0-alpha01 中包含这些提交内容。
新功能
- 开发者可以通过
Constraints.setRequiredNetworkRequest方法指定NetworkRequest作为工作器的限制。这样可以更精细地控制此 worker 应在哪个网络中运行。
API 变更
- 添加了将
NetworkRequest指定为约束条件的功能。(Id98a1、b/280634452)
版本 2.9
版本 2.9.1
2024 年 8 月 7 日
发布了 androidx.work:work-*:2.9.1。版本 2.9.1 中包含这些提交内容。
bug 修复
- 修复了以下问题:当工作的“前台”类型具有已被撤消的 Android 14 必备权限时,
WorkManager尝试重启长时间运行的 worker(即前台 worker)会导致崩溃。(b/333957914)
2.9.0 版
2023 年 11 月 29 日
发布了 androidx.work:work-*:2.9.0。版本 2.9.0 中包含这些提交内容。
自 2.8.0 以来的重要变更
- 通过
Flow实现可观测性。现在,可以通过 Flow 的WorkManager.getWorkInfosFlow和类似方法来观察 Worker 的进度,而不是通过LiveData。 - 现在,
WorkManager会提供有关工作器之前为何停止的提示。可以通过getStopReason()方法从工作器本身查询,也可以通过getStopReason()从WorkInfo查询。 - 通过
setNextScheduleTimeOverride精确调度周期性工作器。这样一来,系统就可以动态计算下一个周期性工作安排,从而实现自适应刷新时间、自定义重试行为等高级功能,或者让新闻 Feed 工作器在用户每天早上醒来之前运行,而不会出现漂移。ExistingPeriodicWorkPolicy.UPDATE应与这些技术搭配使用,以避免在安排下一个工作器时取消当前正在运行的工作器。 - WorkManager 的测试与生产环境中的线程处理相匹配。
ExecutorsMode.PRESERVE_EXECUTORS可在initializeTestWorkManager中使用,以保留在Configuration中设置的执行器并使用实际的主线程。 - 协程 API(例如
CoroutineWorker)已从附加工件 work-runtime-ktx 移至主工件 work-runtime。work-runtime-ktx 现在为空。
API 变更
- 已将
stopReason添加到WorkInfo。它在工作器运行后使stopReason可用。这有助于以可用的方式报告stopReason,因为一旦工作器停止,应用本身可能会很快被终止。(I21386) - 允许通过配置设置
Clock,并使用该值来驱动 Worker 测试的执行顺序。(Ic586e) - 向
ListenableWorker添加了getStopReason()方法,该方法会提供有关工作器为何停止的提示。(I07060) - 添加了
WorkManagerTestInitHelper#closeWorkDatabase(),以避免 Closeguard 针对泄露的资源发出警告。(Ia8d49) WorkInfo的构造函数现在是公开的,这在测试中可能很有用。(Ia00b6、b/209145335)work-runtime-ktx现在为空,CoroutineWorker和其他 Kotlin 特有的实用程序现在可在主工作运行时制品中使用。(I71a9a)- 添加了
setNextScheduleTimeOverride方法,该方法可用于准确设置定期工作时间表 (I3b4da) - 向
WorkInfo添加了getNextScheduleTimeMillis以获取预定的运行时间信息。(I797e4) - 向
WorkInfo添加了初始延迟时间和周期性信息。(I52f2f) - 添加了通过 Flow 观察 worker 的方法,即
getWorkInfosByTagFlow、getWorkInfoByIdFlow、getWorkInfosForUniqueWorkFlow、getWorkInfosFlow方法(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 变更
- 为
WorkInfo.stopReason和ListenableWorker.stopReason返回的停止原因添加了常量 (I0cc00)
版本 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,因为一旦工作器停止,应用本身可能会很快被终止。(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精确调度周期性工作器。这样一来,系统就可以动态计算下一个周期性工作安排,从而实现自适应刷新时间、自定义重试行为等高级功能,或者让新闻 Feed 工作器在用户每天早上醒来之前运行,而不会出现漂移。应将ExistingPeriodicWorkPolicy.UPDATE与这些技术搭配使用,以避免在安排下一个 worker 时取消当前正在运行的 worker。 WorkManager的测试与生产环境的线程处理相匹配。ExecutorsMode.PRESERVE_EXECUTORS可用于保留在Configuration中设置的执行程序,并使用实际的主线程。- 已将
CoroutineWorker等协程 API 从附加制品work-runtime-ktx移至主制品work-runtime。work-runtime-ktx现已为空。
API 变更
WorkInfo的构造函数现在是公开的,这在测试中可能很有用。(Ia00b6、b/209145335)work-runtime-ktx现在为空,CoroutineWorker和其他 Kotlin 特定的实用程序现在可在主work-runtime工件中使用。(I71a9a)- 添加了
setNextScheduleTimeOverride方法,该方法可用于准确设置定期工作时间表 (I3b4da) getEarliestRunTimeMillis已重命名为getNextScheduleTimeMillis。(I2bd7a)- 将安排的下一次运行时间信息添加到了
WorkInfo中。(I797e4) - 向
WorkInfo添加了初始延迟时间和周期性信息。(I52f2f) - 添加了通过 Flow 观察 worker 的方法,即
getWorkInfosByTagFlow、getWorkInfoByIdFlow、getWorkInfosForUniqueWorkFlow、getWorkInfosFlow方法(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 以来的重要变更
新功能
- 添加了以非干扰性方式更新
WorkRequests的功能,以保持原始排队时间、工作链等。您可以参阅有关此功能的详细博文以及WorkManager.updateWork和ExistingPeriodicWorkPolicy.UPDATE的 Javadoc,以了解详情。
API 变更
- 添加了
WorkManager.updateWork,用于更新工作并保持其原始排队时间和工作链。(I9a248、b/219446409) - 添加了
ExistingPeriodicWorkPolicy.UPDATE。此政策允许按名称更新定期工作。它与现有的REPLACE类似,但干扰性更小:它不会取消目前正在运行的工作器并且会保持排队时间 - 初始延迟和期间是根据原始排队时间(而非更新时间)计算的。废弃了REPLACE,以缓解名称非常类似的REPLACE和UPDATE之间发生混淆的问题。如果您仍想保留REPLACE的旧语义,则可以使用新添加的CANCEL_AND_REENQUEUE,它与REPLACE相同。(I985ed、b/219446409) - 添加了通过 setSchedulingExceptionHandler 拦截提供
Consumer<Throwable>的调度异常的功能 - 添加了通过 setInitializationExceptionHandler 提供
Consumer<Throwable>的功能,以确定尝试初始化 WorkManager 时是否存在问题。 OneTimeWorkRequest和PeriodicWorkRequest的内嵌帮助程序已从androidx.work:work-runtime-ktx移至androidx.work:work-runtime(I0010f、b/209145335)- 添加了
WorkQuery.fromIds、WorkQuery.fromStates、WorkQuery.fromUniqueWorkNames和WorkQuery.fromTags辅助方法,以直接创建WorkQuery。(b/199919736)(If48f2、b/199919736) - 为
Worker添加了getForegroundInfo。(Ic1ead) - 适用于 RxJava 2 和 RxJava 3 的
RxWorker现在具有返回Completable的setForeground,可用于代替返回ListenableFuture的setForegroundInfoAsync - 适用于 RxJava 2 和 RxJava 3 的
RxWorker具有返回Single的getForegroundInfo,可用于代替返回ListenableFuture的getForegroundInfoAsync。(b/203851459) - 现在可以直接构建约束条件而无需使用
Constraints.Builder,这对于 Kotlin 用户非常方便。(Idc390、b/137568653) - 添加了检查
WorkManager是否已初始化的功能。此外,还为库开发者添加了新的getConfiguration()API,用于获取WorkManager进行初始化时使用的配置。(I6eff3、b/212300336)
bug 修复
- 修复了 GreedyScheduler 在工作器处于负载状态时会阻止其立即运行的问题。(I9686b、b/248111307)
- 向在 SDK 33 及更高版本中需要授予
POST_NOTIFICATIONS权限的 API 添加了@RequiresPermission。(Ie542e、b/238790278) - 使用
suspendCancellableCoroutine时,将CoroutineScope中的取消操作传播到ListenableFuture。
版本 2.8.0-rc01
2022 年 12 月 7 日
发布了 androidx.work:work-*:2.8.0-rc01。版本 2.8.0-rc01 中包含这些提交内容。
新功能
- 此版本没有任何新功能。这主要是版本递增
版本 2.8.0-beta02
2022 年 11 月 9 日
发布了 androidx.work:work-*:2.8.0-beta02。版本 2.8.0-beta02 中包含这些提交内容。
bug 修复
- 修复了
WorkInfo中的equals方法,该方法以前不会考虑新的生成信息。(4977cc)
版本 2.8.0-beta01
2022 年 10 月 5 日
发布了 androidx.work:work-*:2.8.0-beta01。版本 2.8.0-beta01 中包含这些提交内容。
bug 修复
- 修复了 GreedyScheduler 在工作器处于负载状态时会阻止其立即运行的问题。(I9686b、b/248111307)
版本 2.8.0-alpha04
2022 年 9 月 7 日
发布了 androidx.work:work-*:2.8.0-alpha04。版本 2.8.0-alpha04 中包含这些提交内容。
API 变更
- 添加了
WorkerInfo.getGeneration()和WorkerParameters.getGeneration(),它们会返回工作器的代。如果工作器是使用ExistingPeriodicWorkPolicy.UPDATE通过WorkManager.updateWork或WorkManager.enqueueUniquePeriodicWork进行更新的,便会有多代。请注意,如果工作器当前正在运行,并且在工作器执行期间发生了更新,此方法可能会根据当前正在运行的工作器的代返回较新的代。(I665c5、b/219446409)(I128a9、b/219446409) - 添加了
InitializationExceptionHandler,这是一个异常处理程序,可用于确定在尝试初始化WorkManager时是否存在问题。(I061de)
版本 2.8.0-alpha03
2022 年 8 月 10 日
发布了 androidx.work:work-*:2.8.0-alpha03。版本 2.8.0-alpha03 中包含这些提交内容。
新功能
- 添加了以非干扰性方式更新
WorkRequests的功能,以保持原始排队时间、工作链等。如需了解详情,请参阅WorkManager.updateWork和ExistingPeriodicWorkPolicy.UPDATE。
API 变更
- 添加了
WorkManager.updateWork,用于更新工作并保持其原始排队时间和工作链。(I9a248、b/219446409) - 添加了
ExistingPeriodicWorkPolicy.UPDATE。此政策允许按名称更新定期工作。它与现有的REPLACE类似,但干扰性更小:它不会取消目前正在运行的工作器并且会保持排队时间 - 初始延迟和期间是根据原始排队时间(而非更新时间)计算的。废弃了REPLACE,以缓解名称非常类似的REPLACE和UPDATE之间发生混淆的问题。如果您仍想保留REPLACE的旧语义,则可以使用新添加的CANCEL_AND_REENQUEUE,它与REPLACE相同。(I985ed、b/219446409) - 添加了通过定义
SchedulingExceptionHandler来拦截调度异常的功能。(I033eb) OneTimeWorkRequest和PeriodicWorkRequest的内嵌帮助程序已从androidx.work:work-runtime-ktx移至androidx.work:work-runtime(I0010f、b/209145335)
bug 修复
- 向在 SDK 33 及更高版本中需要授予 POST_NOTIFICATIONS 权限的 API 添加了
@RequiresPermission。(Ie542e、b/238790278)
版本 2.8.0-alpha02
2022 年 4 月 6 日
发布了 androidx.work:work-*:2.8.0-alpha02。版本 2.8.0-alpha02 中包含这些提交内容。
API 变更
- 现在可以直接构建约束条件而无需使用构建器,这对于 Kotlin 用户非常方便。(Idc390、b/137568653)
- 添加了检查
WorkManager是否已初始化的功能。此外,还为库开发者添加了新的getConfiguration()API,用于获取WorkManager进行初始化时使用的配置。(I6eff3、b/212300336)
版本 2.8.0-alpha01
2022 年 1 月 12 日
发布了 androidx.work:work-*:2.8.0-alpha01。版本 2.8.0-alpha01 中包含这些提交内容。
API 变更
- 添加了
WorkQuery.fromStates、WorkQuery.fromUniqueWorkNames和WorkQuery.fromTags辅助方法,用于直接创建 WorkQuery。(If48f2、b/199919736) - 针对日后推出的 SDK 添加了实验性 BuildCompat 方法(Iafd82、b/207528937)
- 在
Worker中添加了getForegroundInfo。(Ic1ead) - 添加了
WorkQuery.fromIds辅助方法,用于直接根据 ID 创建 WorkQuery。(Ie5bdf、b/199919736) - RxWorker 现在具有返回
Completable的setForeground,可用于代替返回ListenableFuture的setForegroundInfoAsync。(I85156) - 适用于 RxJava 2 的 RxWorker 现在具有返回
Single的getForegroundInfo,可用于代替返回ListenableFuture的getForegroundInfoAsync。(I21c91、b/203851459) - 适用于 RxJava 3 的 RxWorker 现在具有返回
Single的getForegroundInfo,可用于代替返回ListenableFuture的getForegroundInfoAsync。(I1ca8a) - RxWorker 现在具有返回
Completable的setForeground,可用于代替返回ListenableFuture的setForegroundInfoAsync。(I992a3、b/203851459)
bug 修复
- 使用
suspendCancellableCoroutine时,将CoroutineScope中的取消操作传播到ListenableFuture。(I77e63)
版本 2.7
版本 2.7.1
2021 年 11 月 17 日
发布了 androidx.work:work-*:2.7.1。版本 2.7.1 中包含这些提交内容。
bug 修复
- 使用
suspendCancellableCoroutine时,CoroutineScope中的取消操作会传播到ListenableFuture。(I77e63) - 如果延迟的工作请求标记为“加急”,系统会立即抛出异常。bef1762
版本 2.7.0
2021 年 10 月 13 日
发布了 androidx.work:work-*:2.7.0。版本 2.7.0 中包含这些提交内容。
自 2.6.0 以来的重要变更
WorkManager 引入了一个新的
WorkRequest.Builder.setExpedited(...)API,以帮助处理 Android 12 中的前台服务限制。使用
setExpedited(...)时,从 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 变更
- 移除了
@ExperimentalExpeditedWorkAPI,因为适用于 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 中包含这些提交内容。
新功能
移植自 WorkManager
2.6.0-alpha02:添加了对可在任何进程中运行的工作器的支持。(Iaf200)移植自 WorkManager
2.6.0-alpha02:添加了一个RemoteCoroutineWorker,它是可绑定到远程进程的RemoteListenableWorker实现。(I30578)
API 变更
- 移植自 WorkManager
2.6.0-alpha02:添加了对TEMPORARILY_UNMETERED网络约束条件的支持。(I08d5e) - 移植自 WorkManager
2.6.0-alpha02:添加了针对setProgressAsync()的多进程工作器支持。(Ib6d08) - 移植自 WorkManager
2.6.0-alpha02:将WorkManagerInitializer设为公开,以便其他androidx.startup.Initializer可将其用作依赖项。(I5ab11)
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/1730694RemoteListenableWorker现在可以与RemoteWorkerService正确取消绑定,以便RemoteWorkerService进行正确清理。aosp/1743817ForceStopRunnable现在仅在主应用进程中运行。这是一项优化,可以避免使用多个进程的应用发生资源争用情况。aosp/1749180、aosp/1761729
版本 2.6.0-beta01
2021 年 6 月 2 日
发布了 androidx.work:work-*:2.6.0-beta01。版本 2.6.0-beta01 中包含这些提交内容。
此版本仅包含一些细微的文档改进。此版本与 2.6.0-alpha02 几乎完全相同。
版本 2.6.0-alpha02
2021 年 4 月 21 日
发布了 androidx.work:work-*:2.6.0-alpha02。版本 2.6.0-alpha02 中包含这些提交内容。
新功能
添加了对可在任何进程中运行的工作器的支持。(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 修复
- 针对会导致在使用
AlarmManagerAPI 时抛出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工件。这样可以通过将工作请求调度工作集中到单个进程来实现性能提升。- 只需定义对
implementation "androidx.work:work-multiprocess:2.5.0"的依赖项,即可使用work-multiprocess - 使用 Configuration.Builder.setDefaultProcessName(String) 指定主进程。
- 如果使用
work-multiprocess,则还需要使用 RemoteWorkManager 来管理WorkRequest。RemoteWorkManager 始终会与指定进程通信。此外,进程内调度程序也会在指定进程中运行。
- 只需定义对
- 有时,
ActivityManager无法实例化JobService实例来启动作业。这会导致底层作业在出现平台错误时被静默丢弃。WorkManager现在可确保,在通过协调作业初始化Application时,每个WorkRequest都有后备作业。这会极大地提高作业执行的可靠性。(b/172475041、aosp/1489577) WorkManager会通过缩减在WorkRequest完成后跟踪WorkRequest的缓冲时长来限制数据库的增长。该时长之前是7天,现在已缩减至1天加上 keepResultsForAtLeast 时长。(aosp/1419708)TestListenableWorkerBuilder现在支持扩展ListenableWorker的具体化类,以使测试变得更容易。(aosp/1443299、b/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/1540566、b/173769028) - 修复了以下 bug:数据库事务在极少数情况下未标记为成功。此问题会导致部分 Motorola 设备出现问题。(aosp/1535368、b/175944460)
- 修复了一个 bug,以便在尝试与已终止的进程取消绑定时忽略
NoSuchElementException。(aosp/1530589) - 改进了
ConstraintTrackingWorker,以便仅停止尚未停止的ListenableWorker。(aosp/1496844、b/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/172475041、aosp/1489577) - 添加了针对以下平台 bug 的解决方法:使用
setForeground*API 时会导致前台服务停止运行。(b/170924044、aosp/1489901)
版本 2.5.0-beta01
2020 年 10 月 28 日
发布了 androidx.work:work-*:2.5.0-beta01。版本 2.5.0-beta01 中包含这些提交内容。
新功能
WorkManager会自动限制可被进程内调度程序接收的WorkRequest数量。这些请求仍会按 FIFO 顺序执行。(aosp/1455228)- 当应用的数据存储区处于不良状态时,
WorkManager会尝试进行恢复。(aosp/1463103)
bug 修复
- 当
ListenableWorker中断时,立即将其标记为ENQUEUED,以便随后可以重新调度它们。(aosp/1455618、b/170273988)
版本 2.5.0-alpha03
2020 年 10 月 14 日
发布了 androidx.work:work-*:2.5.0-alpha03。版本 2.5.0-alpha03 中包含这些提交内容
API 变更
TestListenableWorkerBuilder和TestWorkerBuilder不使用原始类型。(I883ad、b/169787349)
bug 修复
- 使用
ApplicationInfo确定默认应用进程的名称。(b/168716641、aosp/1429950) - 修复了
RemoteWorkManager和RemoteWorkContinuation的可见性规则。这些 API 不再标记为@Restricted。(aosp/1432091) - 修复了
:work:work-multiprocess的 proguard 规则。(aosp/1432091) - 改进绑定到前台服务的长时间运行工作的通知生命周期。(b/168502234、aosp/1431331)
版本 2.5.0-alpha02
2020 年 9 月 16 日
发布了 androidx.work:work-*:2.5.0-alpha02。版本 2.5.0-alpha02 中包含这些提交内容。
新功能
- 为 WorkQuery 添加了 API,以便能够使用
id查询WorkInfo。(aosp/1412372、b/157335295) - WorkManager 可以通过新工件 (
androidx.work:work-multiprocess:*) 更好地支持使用多个进程的应用。此新工件有助于解决大型应用遇到的一些问题,其中包括:- WorkManager 通常在每个应用进程中都需要进行初始化。这种情况不太理想,因为这会增加 SQLite 争用,进而导致其他问题。现在,WorkManager 中新增了一些 API,这些 API 可以使用
Configuration#setDefaultProcessName(processName)指定主应用进程。processName是完全限定的进程名称,类似于packageName:processName(例如com.example:remote)。 - 新增了一组 API:用于
enqueue、cancel和query工作请求的RemoteWorkManager和RemoteWorkContinuation。为了避免多个进程间出现 SQLite 争用,这些 API 不包含LiveData变体。对enqueue、cancel和query的所有调用都将使用 AIDL 转发到primary应用进程,并返回连贯的ListenableFuture。(aosp/1392657、aosp/1411210、aosp/1412215、aosp/1417713)
- WorkManager 通常在每个应用进程中都需要进行初始化。这种情况不太理想,因为这会增加 SQLite 争用,进而导致其他问题。现在,WorkManager 中新增了一些 API,这些 API 可以使用
API 变更
- 如果已经完成的
WorkRequest没有任何未完成的依赖项,WorkManager 现在会更激进地删除这些工作请求。缓冲时长从7天更改为1天。(aosp/1419708)
bug 修复
- 现在,WorkManager 会主动协调作业,以便在初始化
WorkManager时保持WorkRequest和JobScheduler作业同步。(aosp/1412794、b/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)
外部贡献
- Zac Sweers 已更正
ArrayCreatingInputMerger的文档 (github/43)。
版本 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/1253230、b/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/134613984、aosp/1199640)现在可以添加自定义
RunnableScheduler以跟踪需要在将来执行的 WorkRequest。进程内调度程序会用到此功能。(aosp/1203944)添加了对以下情形的支持:在使用
DelegatingWorkerFactory时,动态添加要委托的 Factory。(b/156289105、aosp/1309745)使对
BATTERY_NOT_LOW约束条件的跟踪与本平台更贴近。(aosp/1312583)现在,进程内调度程序会使用更好的 API 来确定进程的名称。这有助于更好地支持使用多个进程的应用。(aosp/1324732)
确保执行以下操作的新 lint 规则:
- 在使用
setForegroundAsync()API 时使用正确的foregroundServiceType。(b/147873061、aosp/1215915) - 指定 WorkManager 在直接使用 JobService API 时应使用的 JobScheduler ID。aosp/1223567
- 新增了一个 lint 规则,该规则可确保使用默认
WorkerFactory时ListenableWorker实现现在处于public状态。(aosp/1291262)
- 在使用
现在,未在完成
ListenableWorker之前完成的setForegroundAsync()调用将通过返回的ListenableFuture上的IllegalStateException收到信号。(aosp/1262743)修正了某个前台
Worker运行中断后ForegroundService不停止运行的错误。(b/155579898、aosp/1302153)修正了以下错误:
WorkManager会尝试执行已绑定到一项前台服务的Worker的多个实例(b/156310133、aosp/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-beta01、androidx.work:work-runtime:2.4.0-beta01、androidx.work:work-runtime-ktx:2.4.0-beta01、androidx.work:work-rxjava2:2.4.0-beta01 和 androidx.work:work-testing:2.4.0-beta01。版本 2.4.0-beta01 包含这些提交内容。
bug 修复
- 修正了某个前台
Worker运行中断后ForegroundService不停止运行的错误。(b/155579898、aosp/1302153) - 修正了以下错误:
WorkManager会尝试执行已绑定到一项前台服务的Worker的多个实例(b/156310133、aosp/1309853) - 添加了对以下情形的支持:在使用
DelegatingWorkerFactory时,动态添加要委托的 Factory。(b/156289105、aosp/1309745) - 使对
BATTERY_NOT_LOW约束条件的跟踪与本平台更贴近。(aosp/1312583)
版本 2.4.0-alpha03
2020 年 4 月 29 日
发布了 androidx.work:work-*:2.4.0-alpha03。版本 2.4.0-alpha03 中包含这些提交内容。
新功能
- WorkManager 现在支持 RxJava 3。如需使用 RxJava 3,您应该添加以下依赖项:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"。(aosp/1277904) - 新增了一个 lint 规则,该规则可确保使用默认
WorkerFactory时ListenableWorker实现现在处于public状态。(aosp/1291262)
API 变更
- 现在,在
ListenableWorker完成执行后调用setProgressAsync()会通过ListenableFuture发出Exception信号。(aosp/1285494) WorkQuery.Builder现已标记为final。(aosp/1275037)WorkQuery.Builder工厂方法withStates、withTags和withUniqueWorkNames已分别重命名为fromStates、fromTags和fromUniqueWorkNames。(aosp/1280287)
bug 修复
- 忽略了在跟踪设备的网络状态时出现的
SecurityException。(b/153246136、aosp/1280813)
版本 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/1253230、b/143847546)现在,未在完成
ListenableWorker之前完成的setForegroundAsync()调用将通过返回的ListenableFuture上的IllegalStateException收到信号。(aosp/1262743)
bug 修复
- 修复了用于检查
PeriodicWorkRequest的无效间隔时长的 lint 规则。(aosp/1254846、b/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/147873061、aosp/1215915) - 指定
WorkManager在直接使用JobServiceAPI 时,应使用的JobSchedulerID。(aosp/1223567)
- 在使用
API 变更
添加了
ExistingWorkPolicy.APPEND_OR_REPLACE,它与APPEND类似,但会替换已取消或不满足前提条件的链。(b/134613984、aosp/1199640)现在可以添加自定义
RunnableScheduler以跟踪需要在将来执行的WorkRequest。进程内调度程序会用到此功能。(aosp/1203944)
bug 修复
- 弃用了
RxWorker中的setProgress(),因为此方法之前会返回一种无法实现的类型Single<Void>。新增了一个 API,即setCompletableProgress(),它会返回Completable;并且添加了新的 Lint 规则,以帮助迁移到新的 API。(b/150080946、aosp/1242665)
版本 2.3.4
版本 2.3.4
2020 年 3 月 18 日
发布了 androidx.work:work-*:2.3.4。版本 2.3.4 中包含这些提交内容。
bug 修复
- 修复了一个错误,该错误会导致长时间运行的
Worker的多个实例在超过 10 分钟执行时间窗口之后运行。(aosp/1247484、b/150553353) - 修复了 WorkManager 的 lint
IssueRegistry。感谢 Slack 的 @ZacSweers 对此做出的贡献。(aosp/1217923)
版本 2.3.3
版本 2.3.3
2020 年 3 月 4 日
发布了 androidx.work:work-*:2.3.3。版本 2.3.3 中包含这些提交内容。
bug 修复
- 修复了
Worker在中断后无法重新正确调度的错误。(b/150325687、aosp/1246571)
版本 2.3.2
版本 2.3.2
2020 年 2 月 19 日
发布了 androidx.work:work-*:2.3.2。版本 2.3.2 中包含这些提交内容。
bug 修复
- 修复了 WorkManager 在极少数情况下会超出 JobScheduler 中的 100 个作业限制的问题。(aosp/1226859、b/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/1218539、b/147249312) WorkManager现在依赖于androidx.sqlite:sqlite-framework:2.1.0稳定版。(aosp/1217729)- 添加了 lint 规则,确保在
ForegroundInfo中使用foregroundServiceType时,在AndroidManifest.xml中指定foregroundServiceType。(aosp/1214207、b/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-ktx的api。(aosp/1194410)
版本 2.3.0-beta02
2019 年 12 月 18 日
发布了 androidx.work:work-*:2.3.0-beta02。版本 2.3.0-beta02 中包含这些提交内容。
新功能
- 为不可恢复的 SQLite 异常添加了更清晰的错误消息。(aosp/1185777)
- 添加了一个 lint 规则,该规则可确保在使用按需初始化时从
AndroidManifest.xml中移除内容提供器androidx.work.impl.WorkManagerInitializer。(aosp/1167007) - 添加了一个 lint 警告,当将
enqueue()用于PeriodicWorkRequest而非enqueueUniquePeriodicWork()时,系统会就会发出此警告。(aosp/1166032)
API 变更
ForegroundInfo现在要求您指定要与ListenableWorker.setForegroundAsync()一起使用的notificationId。这是一项重大变更。 这样,您就可以同时运行多个长时间运行的Worker。此外,WorkManager还可更好地管理所提供的Notification的生命周期。(b/145473554、aosp/1181208、asop/1181216、asop/1183577)
bug 修复
- 修复了 AlarmManager 实现中无法正确清除警报的 bug。(aosp/1156444)
- 修复了以下错误:在
WorkRequest列表为空时,会导致构建错误的WorkContinuation链。(b/142835274、aosp/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/142729893、aosp/1143316)
bug 修复
- 修复了由于在事务之外对
setTransactionSuccessful()进行不必要的调用而导致的 bug。在极少数的迁移过程中会发生这种情况。(b/142580433、aosp/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中的containsKeyAPI 已重命名为hasKeyWithValueOfType。ktx库中的相应扩展方法也已重命名。(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-ingsetProgressAPI,在RxWorker中添加了setProgress,后者会返回Single<Void>。借助这些新的 API,Worker 可以通过具有相应的getProgressAPI 的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) - 添加了在部分设备上使用
JobSchedulerAPI 时出现的NullPointerException的解决方法。(aosp/1091020) (b/138364061) (b/138441699)
版本 2.2.0-beta02
2019 年 7 月 19 日
发布了 androidx.work:work-*:2.2.0-beta02。点击此处可查看此版本中包含的提交内容。
bug 修复
- 移除了在
2.2.0-beta01中引入的意外 jacoco 依赖项。
版本 2.2.0-beta01
2019 年 7 月 17 日
发布了 androidx.work:work-*:2.2.0-beta01。点击此处可查看此版本中包含的提交内容。
新功能
androidx.work:work-gcm:2.2.0-beta01是一个新的 Maven 工件,当 Google Play 服务可用于 API 级别 22 或更低级别时,该工件支持将 GCMNetworkManager 用作调度程序。这是一个可选的依赖项,有助于在较旧的 API 版本上进行更稳定且性能更高的后台处理工作。如果您的应用使用 Google Play 服务,请将此依赖项添加到 gradle 文件,以自动获得 GCMNetworkManager 支持。如果 Play 服务不可用,WorkManager 将继续在旧款设备上回退到 AlarmManager。
bug 修复
- 修复了在 Nvidia Shield K1 平板电脑上跟踪网络状态时出现的
IllegalArgumentException。(aosp/1010188)
版本 2.1.0
版本 2.1.0
2019 年 7 月 11 日
发布了 androidx.work:work-*:2.1.0。此版本与 androidx.work:work-*:2.1.0-rc01 完全相同。
自 2.0.1 以来的重要更改
work-runtime-ktx现在需要 Java 8。如果您遇到任何问题,可以将以下内容添加到build.gradle:kotlinOptions { jvmTarget = "1.8" }- 为 WorkManager 添加了按需初始化功能,这样将仅在引用 WorkManager 时创建该组件。b/127497100 如需设置您的项目以进行按需初始化,请执行以下操作:
- 停用自动初始化程序。
- 在您的自定义
Application对象上实现Configuration.Provider。 - 将
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工件中的TestWorkerBuilder和TestListenableWorkerBuilder创建可执行单元测试的Worker和ListenableWorker类的功能。- 请注意,
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的实例时会使用正确的WorkerFactory。b/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 如需设置您的项目以进行按需初始化,请执行以下操作:
- 停用自动初始化程序。
- 在您的自定义
Application对象上实现Configuration.Provider。 - 将
WorkManager.getInstance()的所有引用更改为WorkManager.getInstance(Context)。在进行这项更改的过程中,我们已弃用WorkManager.getInstance()。即使您不进行按需初始化,调用新的WorkManager.getInstance(Context)替代方法也始终是更安全的做法。
- 添加了使用
work-testing工件中的TestWorkerBuilder和TestListenableWorkerBuilder创建可执行单元测试的Worker和ListenableWorker类的功能。- 请注意,
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
- 修复了处理长工作链时出现的
StackOverflowError。b/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 之前的依赖项
参考文档: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
- 修复了处理长工作链时出现的
StackOverflowError。b/129091233
版本 1.0.0
版本 1.0.0
2019 年 3 月 5 日
这是 WorkManager 的 1.0.0 稳定版。此版本的 WorkManager 与 1.0.0-rc02 完全相同。
版本 1.0.0-rc02
2019 年 2 月 21 日
这是 WorkManager 的 1.0.0 稳定版的第二个候选版本。此版本修复了 2 个 bug。
bug 修复
现在,在应用崩溃后会正确调度
Worker。b/124546316现在,抛出未检查的
Exception的Worker已正确标记为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)或更低版本的设备上出现的
NullPointerException。b/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)或更低版本的设备上出现的
ConcurrentModificationException。b/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而不是Payload。Worker没有用于输出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类以及引用它的方法不再可供公共使用。这是一项重大变更。- 在
WorkManager、WorkContinuation和OneTimeWorkRequest中移除了 varargs 方法的剩余部分以简化 API。要解决任何编译问题,您可以使用Arrays.asList(...)封装现有的 varargs。我们仍然会包含每个方法的单参数版本。这是一项重大变更。 - 移除了
WorkContinuation.combine(OneTimeWorkRequest, *)变体。它们之前呈现的 API 令人困惑,而现有的combine方法更容易理解。这是一项重大变更。
bug 修复
- 现在,在恢复已执行任务的终止进程时,版本低于 Marshmallow 的实现更加可靠。
- 通过
observeForever观察到的LiveData会通过 WorkManager 进行跟踪。这是 Room 库修复的向后移植。b/74477406 - 如果序列化对象超过其大小上限,
Data.Builder.build()现在会抛出异常。之前这种情况只发生在后台线程,因此您无法正确处理这种问题。 - 进一步区分了“停止”操作和“取消”操作,
getWorkInfoById()将在ListenableWorker.onStopped()期间返回具有CANCELLEDState的WorkInfo。 - 在
ListenableWorker中将nullResult视为失败。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而不是Payload。Worker没有用于输出Data的 getter 和 setter 方法。 - 添加了
Operation.await()和ListenableFuture.await()Kotlin 扩展方法。 - 已将
Operation.getException()重命名为Operation.getThrowable()。 ContentUriTriggers类以及引用它的方法不再可供公共使用。- 在
WorkManager、WorkContinuation和OneTimeWorkRequest中移除了 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。 - 针对
WorkManager的enqueue和cancel方法的所有变体现在都会返回一个新的Operation类型。这是一项重大变更。 enqueue的所有变体都不再接受WorkRequest的 varargs。这是一项重大变更。请改用集合。您可以使用Arrays.asList()修改现有代码。我们这样做是为了缩减 API 表面和方法计数。- 在一个进程中尝试多次
initializeWorkManager现在会导致出现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()。- 针对
WorkManager的enqueue和cancel方法的所有变体现在都会返回一个新的Operation类型。 enqueue的所有变体都不再接受WorkRequest的 varargs。- 在一个进程中尝试多次
initializeWorkManager现在会导致出现IllegalStateException。
版本 1.0.0-alpha10
2018 年 10 月 11 日
此版本支持开发者控制的异步工作。此版本包含重要的 API 更改,请参阅下面的“重要 API 更改”部分。
我们预计 WorkManager 正在进入其 alpha 版本期间的最后阶段。我们希望在 Beta 版中使 API 变得稳定,因此请花一些时间在我们的问题跟踪器上提交反馈。
API 变更
- 移除了所有之前的
deprecated方法和类,尤其是默认的Worker构造函数。这是一项重要的 API 变更。 NonBlockingWorker已重命名为ListenableWorker,它现在是一个未隐藏的公共类,随时可供使用。- 通过
ListenableWorker可以访问一个在主线程上调用的抽象方法,即ListenableFuture<Payload> onStartWork()。异步启动和处理工作由您负责执行。完成后,您应该适当地更新ListenableFuture。ListenableFuture的参考实现在alpha02的Futures软件包中提供(请参阅下面的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/116253486 和 b/116677275 WorkContinuation.combine()现在接受一个或更多WorkContinuation,而不是两个或更多。b/117266752
重要 API 更改
- 移除了所有之前的
deprecated方法和类,尤其是默认的Worker构造函数。 - 将接口
WorkerFactory和具体实现DefaultWorkerFactory合并到了一个名为WorkerFactory的抽象类中。 - 移除了
WorkManager.synchronous()和WorkContinuation.synchronous()。 WorkManager.getStatus*()方法现在返回ListenableFuture。WorkManager.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)调用委托给了底层Worker。b/114125093 - 针对 Firebase JobDispatcher 强制采用正确的最小退避延迟。b/113304626
- 改进了库的内部线程保证。
- 更正了与
LiveData内部重复数据删除有关的潜在问题。
API 变更
- 您现在可以通过将
WorkerFactory指定为WorkManager.Configuration的一部分,在运行时创建自己的Worker实例。后备出厂设置为DefaultWorkerFactory,它与之前版本的 WorkManager 的行为相符。Worker和NonBlockingWorker的默认构造函数现在标记为已弃用。请使用新的构造函数 (Worker(Context, WorkerParameters)) 并调用super(Context, WorkerParameters),我们将在未来版本的 WorkManager 中移除默认构造函数。
- 我们在内部已开始使用新的
ListenableFuture工件(没有 Guava 依赖项)。我们将在即将发布的版本中向 API 引入 ListenableFutures。此更改将支持最终取消隐藏NonBlockingWorker。 - 添加了通过
TestDriver.setInitialDelayMet(UUID)和TestDriver.setPeriodDelayMet(UUID)在TestDriver中触发定时工作的功能。b/113360060
重大变更
- 废弃了默认的
Worker和NonBlockingWorker构造函数。请尽快迁移到新的构造函数。我们将在未来版本中移除默认构造函数。
版本 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中的ConcurrentModificationException。b/112272753 - 将
Data.getBooleanArray(String)和Data.getIntArray(String)的返回值类型注解更改为@Nullable而不是@NonNull。b/112275229
API 变更
Worker现在扩展了一个新类NonBlockingWorker。这不会影响任何当前的用法。将来,NonBlockingWorker将成为自定义线程解决方案完全支持的实体。- 将
Data.getBooleanArray(String)和Data.getIntArray(String)的返回值类型注解更改为@Nullable而不是@NonNull。b/112275229 - Kotlin 扩展程序:弃用了
Map.toWorkData()而添加了顶级workDataOf(vararg Pair<String, Any?>),以便与现有 API 更加一致。
版本 1.0.0-alpha06
2018 年 8 月 1 日
bug 修复
- 防止在安排工作时锁定数据库。b/111801342
- 修复了导致
PeriodicWork在低电耗模式下无法按计划运行的错误。b/111469837 - 修复了跟踪约束时导致
WorkManager崩溃的竞争条件问题。googlecodelabs/android-workmanager/issues/56 - 在使用
WorkRequest.Builder#build()时创建唯一的WorkRequest。b/111408337 - 仅当有
WorkRequest需要时,才启用RescheduleReceiver。b/111765853
版本 1.0.0-alpha05
2018 年 7 月 24 日
API 变更
WorkManager.getInstance()现在带有@NonNull(而不是@Nullable)注释。如果在手动初始化的情况下未正确初始化单一实例,则该方法将抛出IllegalStateException。这是一项重要的 API 变更。- 新增了一个 API,即
Configuration.Builder.setMinimumLoggingLevel(int),它可以控制 WorkManager 的详细程度。默认情况下,WorkManager 会记录Log.INFO及更高级别的信息。 - 更改了
Data.getString()的签名,因此它不再采用默认值(隐式为null)。这是一项重要的 API 更改。 - 将需要的某些仅供内部使用的方法标记为
@hide。其中包括Constraints构造函数Data.toByteArray()和Data.fromByteArray(byte[])。这是一项重要的 API 更改。
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/109827628、b/109758949 和 b/80230748
修复了在将
WorkRequest重新加入队列时出现的崩溃问题。b/109572353修复了在使用
work-runtime-ktx依赖项时出现的 Kotlin 编译器警告。WorkManager 现在使用
Room1.1.1-rc1。
API 变更
- 添加了
getStatusesSync(),即WorkContinuation.getStatuses()的同步版本。 Worker能够区分用户发起的取消和操作系统请求的临时停止。如果已请求任何类型的停止,Worker.isStopped()将返回true。显式取消工作进程后,Worker.isCancelled()将返回true。b/79632247- 在 API 28 上添加了对 JobParameters#getNetwork() 的支持。这通过
Worker.getNetwork()公开。 - 添加了
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit),这样便可强制规定可以将多少作业发送到JobScheduler或AlarmManager。这有助于防止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/79950952 和 b/109710758
行为变更
- 为所有
WorkRequest添加了一个隐式标记,它是Worker的完全限定类名。这样便能够在没有tag的情况下或在id不可用时移除WorkRequest。b/109572351
重大变更
- 已将
Worker.WorkerResult重命名为Worker.Result。 Worker.onStopped现在有一个额外的isCancelled参数,显式取消Worker后,该参数将设置为true。
版本 1.0.0-alpha02
2018 年 5 月 24 日
bug 修复
- 修复了在
State.isFinished()时出现的NullPointerException。b/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。