WorkManager
最新更新 | 稳定版发布 | 发布候选版 | Beta 版发布 | Alpha 版发布 |
---|---|---|---|---|
2025 年 4 月 23 日 | 2.10.1 | - | - | - |
声明依赖项
要添加 WorkManager 的依赖项,您必须将 Google Maven 代码库 添加到您的项目中
在您的应用或模块的 build.gradle
文件中添加所需工件的依赖项
Groovy
dependencies { def work_version = "2.10.1" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.10.1" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
有关使用 Kotlin 扩展的更多信息,请参阅 ktx 文档。
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的建议,请告诉我们。在创建新问题之前,请查看此库中的现有问题。您可以通过点击星形按钮为现有问题投票。
有关更多信息,请参阅问题跟踪器文档。
版本 2.10
版本 2.10.1
2025 年 4 月 23 日
androidx.work:work-*:2.10.1
已发布。版本 2.10.1 包含 这些提交。
Bug 修复
- 减少
WorkManager
注册用于约束跟踪的NetworkCallback
时抛出TooManyRequestsException
的可能性。(b/231499040, b309d5)。
版本 2.10.0
2024 年 10 月 30 日
androidx.work:work-*:2.10.0
已发布。版本 2.10.0 包含 这些提交。
自版本 2.9.1 以来的重大变更
- 从
WorkManager
添加了跟踪标签到作业,这使得“adb shell dumpsys jobscheduler”更容易理解,因为它将包含正在执行的 Worker 的名称。跟踪部分也已添加到WorkManager
的关键区域。 - 添加了
Configuration.workerCoroutineContext
以控制CoroutineWorker
执行的调度器。 - 开发者可以通过
Constraints.setRequiredNetworkRequest
方法指定NetworkRequest
作为 Worker 的约束。这使得对 Worker 应运行的网络有了更精细的控制。 WorkManager
2.10.0 现在已使用 SDK 35 编译,并包含针对 SDK 35 兼容性的各种更改。
版本 2.10.0-rc01
2024 年 10 月 24 日
androidx.work:work-*:2.10.0-rc01
已发布。版本 2.10.0-rc01 包含 这些提交。
版本 2.10.0-beta01
2024 年 10 月 2 日
androidx.work:work-*:2.10.0-beta01
已发布。版本 2.10.0-beta01 包含 这些提交。
版本 2.10.0-alpha04
2024 年 9 月 18 日
androidx.work:work-*:2.10.0-alpha04
已发布。版本 2.10.0-alpha04 包含 这些提交。
API 变更
- 添加停止原因
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
,用于当在前台工作器因前台服务类型执行超时而停止时的情况。(Ibd0af)
版本 2.10.0-alpha03
2024 年 9 月 4 日
androidx.work:work-*:2.10.0-alpha03
已发布。版本 2.10.0-alpha03 包含 这些提交。
新功能
- 从
WorkManager
添加了跟踪标签到作业,这使得“adb shell dumpsys jobscheduler”更容易理解,因为它将包含正在执行的 Worker 的名称。跟踪部分也已添加到WorkManager
的关键区域。
API 变更
- WorkManager 2.10.0 现已使用 SDK 35 编译。
- 修复了类型为“短服务”和“数据同步”的前台工作器超时并导致 ANR 的问题,原因是
WorkManager
未调用stopSelf()
。此修复仅适用于引入了前台服务类型的 API 34 和 35 设备。(ca06b2, b/364508145) - 新的
WorkerParameters
API,使得在使用WorkerFactory
时可以切换Worker
绑定的远程进程。(Ibdc8a, Ie8a90, I7373f)
Bug 修复
- 修复了因前台工作类型拥有 Android 14 前置权限,而这些权限被撤销时,
WorkManager
尝试重新启动长时间运行的工作器(即前台工作器)导致的崩溃。(b/333957914) - 移除了对新平台 API 访问的手动概括,因为当使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 时,以及当使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有构建时,这都会通过 API 建模自动发生。不使用 AGP 的客户端建议更新到 D8 版本 8.1 或更高版本。有关更多详细信息,请参阅此文章。(Ia60e0, b/345472586)
版本 2.10.0-alpha02
2024 年 4 月 17 日
androidx.work:work-*:2.10.0-alpha02
已发布。版本 2.10.0-alpha02 包含 这些提交。
API 变更
- 增加了通过 WorkManager 中可配置的
@RestrictTo
Tracer
发出跟踪范围的功能。(I17d7f, b/260214125) - 添加了
Configuration.workerCoroutineContext
以控制CoroutineWorker
执行的调度器。它有助于完全避免在WorkManager
中使用Dispatchers.Default
。(Icd1b7) - 为 Worker 添加自定义异常处理程序 (Ib1b74, b/261190695)
OneTimeWorkRequest.Builder
和PeriodicWorkRequest.Builder
现在可以使用KClass
而不是Class
构造:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6)WorkManager
类已迁移到 Kotlin。现在返回LiveData
、ListenableFuture
或Flow
的方法提供正确的空值信息。如果客户端代码中的空值假设不正确,可能需要更改客户端的源代码。(If6757)
版本 2.10.0-alpha01
2024 年 1 月 24 日
androidx.work:work-*:2.10.0-alpha01
已发布。版本 2.10.0-alpha01 包含这些提交。
新功能
- 开发者可以通过
Constraints.setRequiredNetworkRequest
方法指定NetworkRequest
作为 Worker 的约束。这使得对 Worker 应运行的网络有了更精细的控制。
API 变更
- 添加了将
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
尝试重新启动长时间运行的工作器(即前台工作器)导致的崩溃。(b/333957914)
版本 2.9.0
2023 年 11 月 29 日
androidx.work:work-*:2.9.0
已发布。版本 2.9.0 包含这些提交。
自 2.8.0 以来的重要变更
- 通过
Flow
进行可观测性。现在可以通过WorkManager.getWorkInfosFlow
和类似方法通过 Flow 观察 Worker 的进度,而不是通过LiveData
。 - 现在
WorkManager
提供了关于 Worker 之前停止原因的提示。可以通过 Worker 本身通过getStopReason()
方法或从WorkInfo
通过getStopReason()
查询。 - 通过
setNextScheduleTimeOverride
精确调度周期性工作器。这允许动态计算下一个周期性工作计划,可用于实现高级功能,如自适应刷新时间、自定义重试行为,或让新闻源工作器在用户每天醒来之前运行而不会产生漂移。ExistingPeriodicWorkPolicy.UPDATE
应与这些技术一起使用,以避免在调度下一个工作器时取消当前正在运行的工作器。 - WorkManager 的测试与生产环境中的线程匹配。
ExecutorsMode.PRESERVE_EXECUTORS
可用于initializeTestWorkManager
以保留在Configuration
中设置的执行器并使用真实主线程。 - 协程 API,如
CoroutineWorker
,已从附加工件 work-runtime-ktx 移至主工件 work-runtime。work-runtime-ktx 现在是空的。
API 变更
stopReason
已添加到WorkInfo
中。它使stopReason
在工作器运行后可用。这有助于以可用方式报告stopReason
,因为一旦工作器停止,应用本身可能会很快被终止。(I21386)- 允许通过配置设置
Clock
并用于驱动 Worker 测试的执行序列。(Ic586e) - 将
getStopReason()
方法添加到ListenableWorker
中,该方法提供了 Worker 停止原因的提示。(I07060) - 添加了
WorkManagerTestInitHelper#closeWorkDatabase()
以避免 Closeguard 关于资源泄露的警告。(Ia8d49) WorkInfo
的构造函数现在是公共的,这在测试中很有用。(Ia00b6, b/209145335)work-runtime-ktx
现在是空的,CoroutineWorker
和其他特定于 Kotlin 的实用程序现在在主要的 work-runtime 工件中可用。(I71a9a)- 添加了
setNextScheduleTimeOverride
方法,该方法允许准确设置周期性工作计划 (I3b4da) - 添加了
getNextScheduleTimeMillis
以获取计划运行时间信息到WorkInfo
中。(I797e4) - 初始延迟和周期性信息已添加到
WorkInfo
。(I52f2f) - 添加了通过 Flow 观察工作器的方法,通过方法
getWorkInfosByTagFlow
、getWorkInfoByIdFlow
、getWorkInfosForUniqueWorkFlow
、getWorkInfosFlow
(If122a) - 为
Constraints
的构造函数和属性添加了缺失的@RequiresApi(...)
注解。它们现在与Constraints.Builder
中从早期版本WorkManager
中存在的 setter 上的相应注解对齐。(I6d7d2) WorkManager
现在对内容 URI 工作器有一个单独的限制,以确保它们在JobScheduler
中有保证的槽位,从而防止在高负载下丢失内容更新。该限制可以通过Configuration.Builder.setContentUriTriggerWorkersLimit
配置。(Ic128f)- 约束已添加到
WorkInfo
。(I162c0)
版本 2.9.0-rc01
2023 年 10 月 18 日
androidx.work:work-*:2.9.0-rc01
已发布。版本 2.9.0-rc01 包含这些提交。
- 自上次 beta 版发布以来无更改
版本 2.9.0-beta01
2023 年 9 月 6 日
androidx.work:work-*:2.9.0-beta01
已发布。版本 2.9.0-beta01 包含这些提交。
API 变更
- 为
WorkInfo.stopReason
和ListenableWorker.stopReason
返回的停止原因添加了常量。(I0cc00)
版本 2.9.0-alpha02
2023 年 7 月 26 日
androidx.work:work-*:2.9.0-alpha02
已发布。版本 2.9.0-alpha02 包含这些提交。
新功能
- 现在
WorkManager
提供了关于 Worker 之前停止原因的提示。可以通过 Worker 本身通过getStopReason()
方法或从WorkInfo
通过getStopReason()
查询。
API 变更
stopReason
已添加到WorkInfo
中。它在工作器运行后使stopReason
可用。这有助于以可用方式报告stopReason
,因为一旦工作器停止,应用本身可能会很快被终止。(I21386)- 允许通过配置设置 Clock 并用于驱动 Worker 测试的执行序列。(Ic586e)
- 将
getStopReason()
方法添加到ListenableWorker
中,该方法提供了 Worker 停止原因的提示。(I07060) - 添加了
WorkManagerTestInitHelper#closeWorkDatabase()
以避免 Closeguard 关于资源泄露的警告。(Ia8d49)
Bug 修复
- 添加了使用
TestDriver
绕过overrideNextScheduleTime
的功能,并修复了可测试性问题。(Ic2905)
版本 2.9.0-alpha01
2023 年 6 月 7 日
androidx.work:work-*:2.9.0-alpha01
已发布。版本 2.9.0-alpha01 包含这些提交。
新功能
- 通过
Flow
进行可观测性。现在可以通过WorkManager.getWorkInfosFlow
和类似方法通过 Flow 观察 Worker 的进度,而不是通过LiveData
。 - 通过
setNextScheduleTimeOverride
精确调度周期性工作器。这允许动态计算下一个周期性工作计划,可用于实现高级功能,如自适应刷新时间、自定义重试行为,或让新闻源工作器在用户每天醒来之前运行而不会产生漂移。ExistingPeriodicWorkPolicy.UPDATE
应与这些技术一起使用,以避免在调度下一个工作器时取消当前正在运行的工作器。 - WorkManager 的测试与生产环境中的线程匹配。
ExecutorsMode.PRESERVE_EXECUTORS
可用于保留在Configuration
中设置的执行器并使用真实主线程。 - 协程 API,如
CoroutineWorker
,已从附加工件work-runtime-ktx
移至主工件work-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 观察工作器的方法,通过方法
getWorkInfosByTagFlow
、getWorkInfoByIdFlow
、getWorkInfosForUniqueWorkFlow
、getWorkInfosFlow
(If122a) - 为 Constraints 的构造函数和属性添加了缺失的
@RequiresApi(...)
注解。它们现在与Constraints.Builder
中从早期版本WorkManager
中存在的 setter 上的相应注解对齐。(I6d7d2) WorkManager
现在对内容 URI 工作器有一个单独的限制,以确保它们在JobScheduler
中有保证的槽位,从而防止在高负载下丢失内容更新。该限制可以通过Configuration.Builder.setContentUriTriggerWorkersLimit
配置。(Ic128f)- 约束已添加到
WorkInfo
。(I162c0)
版本 2.8
版本 2.8.1
2023 年 3 月 22 日
androidx.work:work-*:2.8.1
已发布。版本 2.8.1 包含这些提交。
Bug 修复
- 修复了
RescheduleReceiver
中的 ANR,该接收器之前未正确处理两次同时广播。(b/236906724)
版本 2.8.0
2023 年 2 月 8 日
androidx.work:work-*:2.8.0
已发布。版本 2.8.0 包含这些提交。
自 2.7.0 以来的重要变更
新功能
- 添加了以非侵入性方式更新
WorkRequests
的功能,保留了原始排队时间、链接等。有关此功能的详细信息,请参阅详细的博客文章以及WorkManager.updateWork
和ExistingPeriodicWorkPolicy.UPDATE
的 javadoc。
API 变更
- 添加了
WorkManager.updateWork
以更新工作,同时保留其原始排队时间和链接。(I9a248, b/219446409) - 添加了
ExistingPeriodicWorkPolicy.UPDATE
。此策略允许按名称更新周期性工作。它类似于现有的REPLACE
,但侵入性较小:如果 Worker 当前正在运行,它不会取消 Worker,并且它保留了排队时间 - 初始延迟和周期是根据原始排队时间而不是更新时间计算的。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) - 添加了
getForegroundInfo
到Worker
。(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 修复
- 修复了贪婪调度器的问题,该调度器在负载较高时会阻止工作器立即运行。(I9686b, b/248111307)
- 向要求授予 SDK 33 及更高版本上
POST_NOTIFICATIONS
权限的 API 添加了@RequiresPermission
。(Ie542e, b/238790278) - 使用
suspendCancellableCoroutine
时,将CoroutineScope
中的取消传播到ListenableFuture
。
版本 2.8.0-rc01
2022 年 12 月 7 日
androidx.work:work-*:2.8.0-rc01
已发布。版本 2.8.0-rc01 包含这些提交。
新功能
- 此版本没有新功能。这主要是版本升级
版本 2.8.0-beta02
2022 年 11 月 9 日
androidx.work:work-*:2.8.0-beta02
已发布。版本 2.8.0-beta02 包含这些提交。
Bug 修复
- 修复了
WorkInfo
中的equals
方法,该方法之前没有考虑新的生成信息。(4977cc)
版本 2.8.0-beta01
2022 年 10 月 5 日
androidx.work:work-*:2.8.0-beta01
已发布。版本 2.8.0-beta01 包含这些提交。
Bug 修复
- 修复了贪婪调度器的问题,该调度器在负载较高时会阻止工作器立即运行。(I9686b, b/248111307)
版本 2.8.0-alpha04
2022 年 9 月 7 日
androidx.work:work-*:2.8.0-alpha04
已发布。版本 2.8.0-alpha04 包含这些提交。
API 变更
- 添加了
WorkerInfo.getGeneration()
和WorkerParameters.getGeneration()
,它们返回 Worker 的代数。如果 Worker 通过WorkManager.updateWork
或WorkManager.enqueueUniquePeriodicWork
使用ExistingPeriodicWorkPolicy.UPDATE
更新,则 Worker 具有多代。请注意,如果 Worker 当前正在运行,并且在 Worker 执行期间发生了更新,则此方法可能会返回比当前运行 Worker 更新的代。(I665c5, b/219446409) (I128a9, b/219446409) - 添加了
InitializationExceptionHandler
,这是一个异常处理程序,可用于确定初始化WorkManager
时是否存在问题。(I061de)
版本 2.8.0-alpha03
2022 年 8 月 10 日
androidx.work:work-*:2.8.0-alpha03
已发布。版本 2.8.0-alpha03 包含这些提交。
新功能
- 添加了以非侵入性方式更新
WorkRequests
的功能,保留了原始排队时间、链接等。有关更多详细信息,请参阅WorkManager.updateWork
和ExistingPeriodicWorkPolicy.UPDATE
。
API 变更
- 添加了
WorkManager.updateWork
以更新工作,同时保留其原始排队时间和链接。(I9a248, b/219446409) - 添加了
ExistingPeriodicWorkPolicy.UPDATE
。此策略允许按名称更新周期性工作。它类似于现有的REPLACE
,但侵入性较小:如果 Worker 当前正在运行,它不会取消 Worker,并且它保留了排队时间 - 初始延迟和周期是根据原始排队时间而不是更新时间计算的。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 变更
- 现在可以直接构造约束,而无需使用 Builder,这对于 Kotlin 用户来说很方便。(Idc390, b/137568653)
- 添加了检查 WorkManager 是否已初始化的功能。此外,还为库开发者添加了一个新的
getConfiguration()
API,以获取 WorkManager 初始化时使用的配置。(I6eff3, b/212300336)
版本 2.8.0-alpha01
2022 年 1 月 12 日
androidx.work:work-*:2.8.0-alpha01
已发布。版本 2.8.0-alpha01 包含这些提交。
API 变更
- 添加了辅助方法
WorkQuery.fromStates
、WorkQuery.fromUniqueWorkNames
、WorkQuery.fromTags
以直接创建 WorkQuery。(If48f2, b/199919736) - 添加了用于未来 SDK 的实验性 BuildCompat 方法。(Iafd82, b/207528937)
- 添加了
getForegroundInfo
到Worker
。(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(...)
时,WorkManager 在 Android 12 开始委托给 JobScheduler 中的加速作业,同时通过委托给前台服务提供对早期 Android 版本的向后兼容性。
版本 2.7.0-rc01
2021 年 9 月 29 日
androidx.work:work-*:2.7.0-rc01
已发布。版本 2.7.0-rc01 包含这些提交。
此版本与 androidx.work:work-*:2.7.0-beta01
相同。
版本 2.7.0-beta01
2021 年 9 月 1 日
androidx.work:work-*:2.7.0-beta01
已发布。版本 2.7.0-beta01 包含这些提交。
新功能
- 初始化 WorkManager 时减少多进程 SQLite 争用。
API 变更
- 由于 Android 12 (S) 的底层平台 API 稳定,移除了
@ExperimentalExpeditedWork
API。(aosp/1792806)
Bug 修复
- 为未实现
getForegroundInfoAsync()
的加速工作器提供更好的错误消息。(aosp/1809376)
版本 2.7.0-alpha05
2021 年 7 月 21 日
androidx.work:work-*:2.7.0-alpha05
已发布。版本 2.7.0-alpha05 包含这些提交。
此版本还包含 WorkManager 2.6.0-beta02
版本中的错误修复。
版本 2.7.0-alpha04
2021 年 6 月 2 日
androidx.work:work-*:2.7.0-alpha04
已发布。
此版本还包含 2.6.0-beta01 版本中的更改。
API 变更
ListenableWorker.setForegroundAsync()
不再被弃用。- 在可能的情况下,我们建议使用
WorkRequest.Builder.setExpedited(...)
API。为了更好地支持应用不受前台服务限制的情况,开发者可以使用ListenableWorker.setForegroundAsync()
API。 - 如果在应用受前台服务限制时调用
ListenableWorker.setForegroundAsync()
,这将抛出 ForegroundServiceStartNotAllowedException。
Bug 修复
- 当加速作业重新调度时,它们不再是加速作业。它们变为常规作业。
版本 2.7.0-alpha03
2021 年 4 月 21 日
androidx.work:work-*:2.7.0-alpha03
已发布。版本 2.7.0-alpha03 包含这些提交。
新功能
来自 WorkManager
2.6.0-alpha02
:增加了对可在任何进程中运行的 Worker 的支持。(Iaf200)来自 WorkManager
2.6.0-alpha02
:添加了RemoteCoroutineWorker
,它是RemoteListenableWorker
的实现,可以绑定到远程进程。(I30578)
API 变更
- 来自 WorkManager
2.6.0-alpha02
:添加了对TEMPORARILY_UNMETERED
网络约束的支持。(I08d5e) - 来自 WorkManager
2.6.0-alpha02
:setProgressAsync()
的多进程 Worker 支持。(Ib6d08) - 来自 WorkManager
2.6.0-alpha02
:使WorkManagerInitializer
公开,以便其他androidx.startup.Initializer
可以将其用作依赖项。(I5ab11)
版本 2.7.0-alpha02
2021 年 3 月 10 日
androidx.work:work-*:2.7.0-alpha02
已发布。版本 2.7.0-alpha02 包含这些提交。
Bug 修复
- 使
PendingIntent
可变性显式化,以修复针对 Android 12 时的崩溃。(b/180884673)
版本 2.7.0-alpha01
2021 年 2 月 18 日
androidx.work:work-*:2.7.0-alpha01
已发布。版本 2.7.0-alpha01 包含这些提交。
新功能
WorkManager 引入了一个新的
WorkRequest.Builder.setExpedited(...)
API,以考虑 Android 12 中的前台服务限制。应用程序在后台时不能再启动前台服务。因此,为了更好地支持以前绑定到前台服务生命周期的长时间运行的工作,应用程序可以将
WorkRequest
标记为加速。此 API 替代了现在已弃用的
setForegroundAsync(...)
/setForeground(...)
API。当使用
setExpedited(...)
时,WorkManager 在 Android 12 开始委托给JobScheduler
中的加速作业,同时通过委托给前台服务提供对早期 Android 版本的向后兼容性。
API 变更
- 添加了对加速
WorkRequest
的支持。
版本 2.6.0
版本 2.6.0
2021 年 9 月 1 日
androidx.work:work-*:2.6.0
已发布。版本 2.6.0 包含这些提交。
自 2.5.0 以来的重要变更
WorkManager 现在使用
androidx.startup
来初始化 WorkManager。如果您过去使用tools:node="remove"
来初始化 WorkManager 所使用的ContentProvider
,那么您需要改为执行以下操作。<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" />
增加了对可在任何进程中运行的 Worker 的支持。(Iaf200)
添加了
RemoteCoroutineWorker
,它是 RemoteListenableWorker 的实现,可以绑定到远程进程。(I30578)
版本 2.6.0-rc01
2021 年 8 月 4 日
androidx.work:work-*:2.6.0-rc01
已发布。版本 2.6.0-rc01 包含这些提交。
此版本与 androidx.work:work-*:2.6.0-beta02
相同。
版本 2.6.0-beta02
2021 年 7 月 21 日
androidx.work:work-*:2.6.0-beta02
已发布。版本 2.6.0-beta02 包含这些提交。
Bug 修复
RemoteWorkManager
现在正确地与RemoteWorkManagerService
解绑,这允许RemoteWorkManagerService
正确清理。aosp/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 包含这些提交。
新功能
增加了对可在任何进程中运行的 Worker 的支持。(Iaf200)
添加了
RemoteCoroutineWorker
,它是RemoteListenableWorker
的实现,可以绑定到远程进程。(I30578)
API 变更
- 添加了对
TEMPORARILY_UNMETERED
网络约束的支持。(I08d5e) - 多进程工作器支持
setProgressAsync()
。(Ib6d08) - 使
WorkManagerInitializer
公开,以便其他androidx.startup.Initializer
可以将其用作依赖项。(I5ab11)
版本 2.6.0-alpha01
2021 年 3 月 24 日
androidx.work:work-*:2.6.0-alpha01
已发布。版本 2.6.0-alpha01 包含这些提交。
新功能
WorkManager
现在使用androidx.startup
来初始化 WorkManager。以前,这是通过androidx.work.impl.WorkManagerInitializer
完成的。(aosp/1608813)如果您过去使用
tools:node="remove"
初始化进程生命周期所使用的ContentProvider
,那么您需要改为执行以下操作。<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.impl.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(或)
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
API 变更
- 添加了一个
Result.getOutputData()
API,它返回 ListenableWorker 的outputData
。(Ie51e3)
Bug 修复
- 添加了一个 OEM 错误的工作方案,该错误在使用
AlarmManager
API 时会导致抛出SecurityException
。(aosp/1587518)
版本 2.5.0
版本 2.5.0
2021 年 1 月 27 日
androidx.work:work-*:2.5.0
已发布。版本 2.5.0 包含这些提交。
自 2.4.0 以来的重大更改
- 一个用于使用多个进程的应用程序的新
work:work-multiprocess
工件。通过将工作请求调度统一到一个进程,这引入了性能提升。- 要使用
work-multiprocess
,请定义以下依赖项:implementation "androidx.work:work-multiprocess:2.5.0"
- 使用 Configuration.Builder.setDefaultProcessName(String) 指定主进程。
- 当使用
work-multiprocess
时,您还需要使用 RemoteWorkManager 来管理您的WorkRequest
。 RemoteWorkManager 始终联系指定进程。进程内调度器也运行在指定进程中。
- 要使用
- 有时,
ActivityManager
无法实例化JobService
实例以启动作业。这导致底层作业因平台错误而静默丢弃。WorkManager
现在通过协调作业确保在应用程序初始化时每个WorkRequest
都有支持作业。这大大提高了作业执行的可靠性。(b/172475041, aosp/1489577) WorkManager
通过减少WorkRequest
完成后跟踪WorkRequest
的缓冲持续时间来限制数据库增长。之前的持续时间为7
天。现已缩短为1
天 + keepResultsForAtLeast 持续时间。(aosp/1419708)TestListenableWorkerBuilder
现在支持扩展ListenableWorker
的具象类,使测试更容易。(aosp/1443299, b/169787349)- 使用 Android Studio Arctic Fox 时,WorkManager 检测器 现已可用。
版本 2.5.0-rc01
2021 年 1 月 13 日
androidx.work:work-*:2.5.0-rc01
已发布。版本 2.5.0-rc01 包含这些提交。
Bug 修复
- 修复了使用基于
WorkQuery
的 API 时,更新实体后getWorkInfosLiveData
未正确失效的错误。(aosp/1540566, b/173769028) - 修复了在某些极少数情况下数据库事务未标记为成功的错误。这导致某些 Motorola 设备出现问题。(aosp/1535368, b/175944460)
- 修复了在尝试从死进程解除绑定时忽略
NoSuchElementException
的错误。(aosp/1530589) - 改进了
ConstraintTrackingWorker
,使其仅在ListenableWorker
尚未停止时才停止它。(aosp/1496844, b/172946965) - 更新 androidx.work 库以 targeting Java 8 (Ibd2f2)
版本 2.5.0-beta02
2020 年 12 月 2 日
androidx.work:work-*:2.5.0-beta02
已发布。版本 2.5.0-beta02 包含这些提交。
Bug 修复
- 修复了
androidx.work:work-multiprocess
中的一个错误,其中 WorkManager 在尝试绑定到指定进程时无意中阻塞了调用线程。(aosp/1475538) - 修复了
PeriodicWorkRequest
未正确协调的错误。(b/172475041, aosp/1489577) - 添加了对使用
setForeground*
API 时停止前台服务的平台错误的解决方法。(b/170924044, aosp/1489901)
版本 2.5.0-beta01
2020 年 10 月 28 日
androidx.work:work-*:2.5.0-beta01
已发布。版本 2.5.0-beta01 包含这些提交。
新功能
WorkManager
会自动限制进程内调度器可以拾取WorkRequest
的数量。请求仍然按 FIFO 顺序执行。(aosp/1455228)- 当应用程序的数据存储处于不良状态时,
WorkManager
会尝试恢复。(aosp/1463103)
Bug 修复
- 当
ListenableWorker
被中断时,立即将其标记为ENQUEUED
,以便随后可以重新调度。(aosp/1455618, b/170273988)
版本 2.5.0-alpha03
2020 年 10 月 14 日
androidx.work:work-*:2.5.0-alpha03
已发布。版本 2.5.0-alpha03 包含这些提交。
API 变更
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,可以使用
Configuration#setDefaultProcessName(processName)
来指定一个主应用进程。processName
是一个完全限定的进程名称,看起来像packageName:processName
(例如com.example:remote
)。 - 一组新的API:
RemoteWorkManager
和RemoteWorkContinuation
用于enqueue
(入队)、cancel
(取消)和query
(查询)工作请求。这些API不包含LiveData
变体,以避免多进程之间的SQLite争用。所有对enqueue
、cancel
和query
的调用都使用AIDL转发到primary
(主)应用进程,并返回一个流式的ListenableFuture
。(aosp/1392657、aosp/1411210、aosp/1412215、aosp/1417713)
- WorkManager 通常需要在每个应用进程中初始化。这不好,因为 SQLite 争用会增加,进而导致其他问题。WorkManager 现在有新的 API,可以使用
API 变更
- WorkManager现在更积极地清理已完成且没有未完成依赖项的
WorkRequest
。缓冲持续时间从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
,包括PeriodicWorkRequests。进程内Scheduler
也不受调度限制(但仍受WorkManager使用的Executor
大小的限制)。这意味着应用程序在前台时现在可以执行更多的WorkRequest。为了管理前台延迟任务的执行,WorkManager
还引入了一个新的可配置的RunnableScheduler
。(aosp/1185778) - WorkManager现在支持RxJava 3。要使用RxJava 3,您应该包含以下依赖项:
implementation "androidx.work:work-rxjava3:2.4.0"
。(aosp/1277904) - 增加了使用
WorkQuery
查询WorkInfo
的能力。当开发者想要通过多个属性的组合来查询WorkInfo
时,这会非常有用。欲了解更多信息,请参阅WorkQuery.Builder.fromStates(...)
、WorkQuery.Builder. fromTags(...)
或WorkQuery.Builder.fromUniqueWorkNames(...)
。(aosp/1253230、b/143847546) 增加了使用以下方式从
WorkManager
请求诊断信息的功能:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
这提供了许多有用的信息,包括:
- 过去24小时内完成的WorkRequest。
- 当前正在RUNNING的WorkRequest。
- 已调度的WorkRequest。(aosp/1235501)
增加了
ExistingWorkPolicy.APPEND_OR_REPLACE
,它类似于APPEND
,但会替换已取消或失败的先决条件链。(b/134613984、aosp/1199640)提供了添加自定义
RunnableScheduler
的功能,以跟踪未来需要执行的WorkRequest。这由进程内调度器使用。(aosp/1203944)在使用
DelegatingWorkerFactory
时,增加了动态添加要委托的工厂的支持。(b/156289105、aosp/1309745)使
BATTERY_NOT_LOW
约束的跟踪与平台更紧密地对齐。(aosp/1312583)进程内调度器现在使用更好的API来确定进程名称。这有助于更好地支持使用多进程的应用程序。(aosp/1324732)
新的Lint规则强制执行以下操作:
- 在使用
setForegroundAsync()
API时,使用正确的foregroundServiceType
。(b/147873061、aosp/1215915) - 直接使用JobService API时,指定WorkManager应使用的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
时,增加了动态添加要委托的工厂的支持。(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的进程内调度器现在功能更强大。以前,进程内Scheduler只会考虑执行未延迟且满足其约束条件的工作。现在,进程内调度器会跟踪将来可能执行的
WorkRequest
,包括PeriodicWorkRequest
。进程内Scheduler也不遵循调度限制(但仍受WorkManager使用的Executor
大小的限制)。这意味着应用程序在前台时现在可以执行更多的WorkRequest
。(aosp/1185778)增加了使用
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
从WorkManager请求诊断信息的功能。这提供了许多有用的信息,包括:- 过去24小时内完成的WorkRequest。
- 当前正在RUNNING的WorkRequest。
- 已调度的WorkRequest。(aosp/1235501)
新的Lint规则强制执行以下操作:
- 在使用
setForegroundAsync()
API时,使用正确的foregroundServiceType
。(b/147873061、aosp/1215915) - 直接使用
JobService
API时,指定WorkManager
应使用的JobScheduler
ID。(aosp/1223567)
- 在使用
API 变更
增加了
ExistingWorkPolicy.APPEND_OR_REPLACE
,它类似于APPEND
,但会替换已取消或失败的先决条件链。(b/134613984、aosp/1199640)提供了添加自定义
RunnableScheduler
的功能,以跟踪未来需要执行的WorkRequest
。这由进程内调度器使用。(aosp/1203944)
Bug 修复
- 弃用了
RxWorker
中的setProgress()
,因为它以前返回的是一个不可能的类型Single<Void>
。新增了一个返回Completable
的APIsetCompletableProgress()
;并新增了有助于迁移到新API的Lint规则。(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)
- 修复了ConstraintControllers中的竞争条件问题。(aosp/1220100)
- 改进了长时间运行Worker的前台服务生命周期管理。(aosp/1226295)
- 改进了在Worker取消时,长时间运行Worker的通知取消管理。(aosp/1228346)
版本 2.3.1
版本 2.3.1
2020年2月5日
androidx.work:work-*:2.3.1
已发布。2.3.1 版本包含这些提交。
Bug修复
- 更好地管理在前台
Service
活动时运行的长时间运行Worker
的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进度。 - WorkManager现在将额外的lint规则作为库的一部分进行打包,这有助于及早发现错误。
版本 2.3.0-rc01
2020年1月8日
androidx.work:work-*:2.3.0-rc01
已发布。2.3.0-rc01 版本包含这些提交。
此版本与2.3.0-beta02
相同
Bug修复
work-testing
artifact现在定义了对work-runtime-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规则,确保在使用按需初始化时,内容提供者
androidx.work.impl.WorkManagerInitializer
会从AndroidManifest.xml
中移除。(aosp/1167007) - 当对
PeriodicWorkRequest
使用enqueue()
而不是enqueueUniquePeriodicWork()
时,新增了lint警告。(aosp/1166032)
API变更
- 现在,在使用
ListenableWorker.setForegroundAsync()
时,ForegroundInfo
要求您指定要使用的notificationId
。这是一个重大更改。这允许您并行运行多个长时间运行的Worker
。WorkManager还更好地管理所提供Notification
的生命周期。(b/145473554、aosp/1181208、asop/1181216、asop/1183577)
Bug修复
- 修复了AlarmManager实现中警报未正确清理的错误。(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,它可以轻松取消WorkRequest
,而无需在AndroidManifest.xml
中注册另一个组件。此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()
导致的错误。这在罕见的迁移中会发生。(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
中的containsKey
API 已重命名为hasKeyWithValueOfType
。ktx
库中相应的扩展方法也已重命名。(b/141916545)
Bug修复
- 当排队的
WorkRequest
数量接近调度限制时,WorkManager 会公平地调度工作。(aosp/1105766) - WorkManager 仅在工作尚未完成时调用
ListenableWorker#onStopped()
。(b/140055777) - WorkManager 现在会在工作器中断或达到其最终状态时删除进度信息。(aosp/1114572)
Data
现在有了更有用的toString()
表示。(b/140945323)Data
现在有了更好的equals()
方法。它还支持Array
类型的deepEquals
。(b/140922528)- WorkManager 现在将其内部数据库和首选项文件存储在无备份目录中。(b/114808216)
版本 2.3.0-alpha01
2019 年 8 月 22 日
androidx.work:work-*:2.3.September 5, 20190-alpha01
已发布。此版本中包含的提交可以在此处找到。
新功能
ListenableWorker
现在可以通过setProgressAsync()
API 设置进度。此外,还在CoroutineWorker
中添加了相应的suspend
-ingsetProgress
API,并在RxWorker
中添加了返回Single<Void>
的setProgress
。通过这些新的 API,工作器可以通过WorkInfo
传达进度信息,WorkInfo
具有相应的getProgress
API。(b/79481554)Data
有一个containsKey()
API,可用于验证Worker
的输入数据是否具有预期类型的键。(b/117136838)Data
现在可以使用Data.toByteArray()
和Data.fromByteArray()
进行序列化。请注意,Data
没有版本控制保证,因此您不应将其持久化或用于应用程序之间的 IPC。它们仅在同一应用程序的多个进程之间使用是安全的。- 添加了通过
Configuration.setInputMergerFactory
指定InputMergerFactory
的功能。(b/133273159)
API变更
- 如果
WorkerFactory
返回先前已调用的ListenableWorker
实例,WorkManager 将抛出IllegalStateException
实例。(b/139554406) - 有关
ListenableFuture
取消和ListenableWorker
中onStopped()
回调的文档更新。(b/138413671)
Bug修复
- 进程内调度器现在会忽略具有
idle
约束的WorkRequest
。这些请求现在只有在设备实际idle
时才会被JobScheduler
接收。(aosp/1089779) TestScheduler
现在在测试中正确使用指定的Executor
作为其内部任务执行器。(aosp/1090749)
版本 2.2.0
版本 2.2.0
2019 年 8 月 15 日
androidx.work:work-*:2.2.0
已发布。此版本中包含的提交可以在此处找到。
此版本与 androidx.work:work-*:2.2.0-rc01
相同。
2.2.0 相较于 2.1.0 的重要变化
androidx.work:work-gcm:2.2.0
是一个新的 Maven 工件,当 Google Play 服务可用于 API 级别 <= 22 时,它支持使用 GCMNetworkManager 作为调度器。这是一个可选依赖项,有助于在较旧的 API 版本上实现更可靠、更高效的后台处理。如果您的应用使用 Google Play 服务,请将此依赖项添加到您的 gradle 文件中,以自动获取 GCMNetworkManager 支持。如果 Play 服务不可用,WorkManager 将继续在较旧的设备上回退到 AlarmManager。
版本 2.2.0-rc01
2019 年 7 月 30 日
androidx.work:work-*:2.2.0-rc01
已发布。此版本中包含的提交可以在此处找到。
Bug修复
- 修复了 AlarmManager 实现中的一个错误,该错误导致服务过早关闭,并在极少数情况下导致
RejectedExecutionException
。(aosp/1092374)(b/138238197)。 - 添加了针对某些设备上使用
JobScheduler
API 时出现NullPointerException
的解决方法。(aosp/1091020)(b/138364061)、(b/138441699)
版本 2.2.0-beta02
2019 年 7 月 19 日
androidx.work:work-*:2.2.0-beta02
已发布。此版本中包含的提交可以在此处找到。
Bug修复
- 移除了在
2.2.0-beta01
中引入的意外 jacoco 依赖项。
版本 2.2.0-beta01
2019 年 7 月 17 日
androidx.work:work-*:2.2.0-beta01
已发布。此版本中包含的提交可以在此处找到。
新功能
androidx.work:work-gcm:2.2.0-beta01
是一个新的 Maven 工件,当 Google Play 服务可用于 API 级别 <= 22 时,它支持使用 GCMNetworkManager 作为调度器。这是一个可选依赖项,有助于在较旧的 API 版本上实现更可靠、更高效的后台处理。如果您的应用使用 Google Play 服务,请将此依赖项添加到您的 gradle 文件中,以自动获取 GCMNetworkManager 支持。如果 Play 服务不可用,WorkManager 将继续在较旧的设备上回退到 AlarmManager。
Bug修复
- 修复了在 Nvidia Shield K1 平板电脑上跟踪网络状态时出现
IllegalArgumentException
的问题。(aosp/1010188)
版本 2.1.0
版本 2.1.0
2019 年 7 月 11 日
androidx.work:work-*:2.1.0
已发布。此版本与 androidx.work:work-*:2.1.0-rc01
相同。
自 2.0.1 以来发生的重要变化
work-runtime-ktx
现在需要 Java 8。如果您遇到任何问题,可以将以下内容添加到您的build.gradle
中:kotlinOptions { jvmTarget = "1.8" }
- 为 WorkManager 添加了按需初始化,这将仅在引用时创建 WorkManager。b/127497100 要为按需初始化设置您的项目,请执行以下操作:
- 禁用自动初始化程序.
- 在您的自定义
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
执行窗口漂移的错误。b/135272196
版本 2.1.0-beta01
2019 年 6 月 13 日
androidx.work:work-*:2.1.0-beta01
已发布。此版本中包含的提交可以在此处找到。
Bug修复
- WorkManager 现在依赖于
Room 2.1.0
,这应该可以修复一些数据库问题。 - 移除了主线程上的一些启动磁盘 I/O。
- 修复了约束跟踪中潜在的死锁。b/134361006
- 抢先取消了归因于 WorkManager 的无效作业。b/134058261
- 为行为不端的设备添加了一些针对 JobScheduler API 的防御性调用。
版本 2.1.0-alpha03
2019 年 6 月 5 日
androidx.work:*:2.1.0-alpha03
已发布。
Bug修复
- 改进了
PeriodicWorkRequest
的文档。 WorkManagerTestInitHelper
现在使用正确的后台执行器进行测试。- 修复了在某些设备上处理大事务时出现的 SQLite 问题。(b/130182503)
- WorkManager 的依赖项现在更加精细。(b/133169148)。
- 解决了 OEM 特定的
JobScheduler
实现中的错误,该错误在使用 WorkManager 调度作业时出现。 - 基于 AlarmManager 的调度器在服务生命周期方面有所改进,这之前曾导致罕见的崩溃。(b/133313734)
版本 2.1.0-alpha02
2019 年 5 月 16 日
WorkManager 2.1.0-alpha02 已发布。此版本包含几个新的 API。
API 变更
PeriodicWorkRequest
现在支持初始延迟。您可以使用PeriodicWorkRequest.Builder
上的setInitialDelay
方法来设置初始延迟。b/111404867添加了使用
DelegatingWorkerFactory
委派给一个或多个已注册的WorkerFactory
的功能。b/131435993添加了通过
Configuration.Builder.setTaskExecutor
自定义 WorkManager 用于所有内部记账的Executor
的功能。改进了
WorkRequest.keepResultsForAtLeast
(b/130638001)、按需初始化和PeriodicWorkRequest.Builder
(b/131711394) 的文档。
版本 2.1.0-alpha01
2019 年 4 月 24 日
WorkManager 2.1.0-alpha01 已发布。此版本包含几个新的 API。请注意,从此版本开始,将有新功能不会回溯到 1.x 版本。我们建议切换到 2.x。
API 变更
- 为 WorkManager 添加了按需初始化,这将仅在引用时创建 WorkManager。b/127497100 要为按需初始化设置您的项目,请执行以下操作:
- 禁用自动初始化程序.
- 在您的自定义
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 已发布。此版本包含一些错误修复。对于旧版 1.x 用户,其中一些更改也出现在 1.0.1-rc01 中。
Bug 修复
- Robolectric 测试现在可以与 WorkManager 正常运行。b/122553577
- 修复了在 Pre-JobScheduler API 上约束跟踪未清理的边缘情况崩溃。b/129226383
- 修复了处理长链工作时出现的
StackOverflowError
。b/129091233 - 更新了
PeriodicWorkRequest
的文档,以表明 API 23 不支持弹性时间。 - 修复了 Kotlin 文档中一些损坏的链接。
版本 2.0.0
版本 2.0.0
2019 年 3 月 20 日
WorkManager 2.0.0 已发布。此版本与 2.0.0-rc01 相同,是 1.0.0 稳定版的 AndroidX 版本,带有 AndroidX 依赖项。我们建议将此版本作为目标,而不是旧版 1.x。所有活跃开发都将以 2.x 为目标,而 1.x 将在有限时间内仅接收关键错误修复。
版本 2.0.0-rc01
2019 年 3 月 7 日
WorkManager 2.0.0-rc01 已发布。此版本与 1.0.0 稳定版相同,但具有 AndroidX 依赖项。一旦此版本达到 2.0.0 稳定版,您应该包含此版本,而旧版 1.x 将仅接收一些关键错误修复。所有活跃开发都将以 2.x 为目标。
Pre-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 修复
- Robolectric 测试现在可以与 WorkManager 正常运行。b/122553577
- 修复了在 Pre-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 稳定版的第二个候选版本。此版本包含两个错误修复。
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 修复
- 修复了在 API 23 上使用
JobScheduler.getPendingJob(...)
的情况。b/123893059 - 修复了在运行 Android 5.1(API 级别 22)或更低版本的设备上出现的
NullPointerException
。b/123835104
版本 1.0.0-beta04
2019 年 2 月 4 日
此版本包含一些错误修复。
Bug 修复
- 改进了基于 AlarmManager 的实现的 PeriodicWork 调度。
- 修复了在使用基于 AlarmManager 的实现时 WorkManager 未能正确跟踪约束的情况。b/123379508
- 修复了在使用基于 AlarmManager 的实现时 WorkManager 未能在进程死亡时重试工作的情况。b/123329850
- 修复了在使用基于 AlarmManager 的实现时 WorkManager 会泄漏 Wakelocks 的情况。
版本 1.0.0-beta03
2019 年 1 月 25 日
此版本包含一些错误修复。
Bug 修复
- 我们在
1.0.0-beta02
中引入了一个回归问题,导致工作在某些情况下无法正常执行。b/123211993 - 修复了工作未正确遵守退避时间的问题。b/122881597
- 修复了在运行 Android 5.1(API 或更低版本)的设备上出现的
ConcurrentModificationException
。这是1.0.0-beta02
中修复的延续。b/121345393 - 为我们清单中缺少此注解的一些组件添加了
exported=false
。 - 在包级别文档中包含了 WorkManager 如何与操作系统交互的信息。
版本 1.0.0-beta02
2019 年 1 月 15 日
此版本包含一些错误修复。
Bug 修复
- 修复了在运行 Android 6.0(API 级别 23)的设备上,周期性工作可能在每个间隔运行不止一次的边缘情况。b/121998363
- 修复了在运行 Android 5.1(API 级别 22)或更低版本的设备上出现的
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 修复
- 先前已取消的成功完成的父工作的子工作将不再运行。b/120811767
- 正确初始化日志类(主要在测试期间浮现)。
版本 1.0.0-alpha13
2018 年 12 月 12 日
此版本包含一个次要 API 更改,对某些 Kotlin 用户会有帮助。
API 变更
androidx.work.Result
已移至ListenableWorker
的内部类。这避免了与 Kotlin 的顶级Result
类发生重构冲突。这是一个破坏性 API 更改。b/120564418
破坏性 API 更改
androidx.work.Result
已移至ListenableWorker
的内部类。
版本 1.0.0-alpha12
2018 年 12 月 5 日
此版本包含一些破坏性 API 更改;请参阅下面的破坏性 API 更改部分。此版本很可能作为我们的第一个 beta 版本发布。alpha12
还包含广泛的文档更新。
API 变更
- 一个新的工件
work-rxjava2
引入了RxWorker
。这是一个需要Single<Payload>
的ListenableWorker
。 - 由于 Firebase JobDispatcher 即将弃用,已移除对其的支持。这意味着
work-firebase
工件在我们进入 beta 阶段后将不再更新。我们将在未来考虑添加替代方案。 - 将
Payload
合并到Result
中。Result
现在是一个“密封类”,具有三个具体实现,您可以通过Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
)和Result.retry()
获取它们。您的ListenableFuture
现在返回Result
而不是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
中其余的可变参数方法,以简化 API。要解决任何构建问题,您可以将现有可变参数包装在Arrays.asList(...)
中。我们仍然包含每个方法的单参数版本。这是一个破坏性更改。 - 移除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们呈现了一个令人困惑的 API;现有的combine
方法更易于理解。这是一个破坏性更改。
Bug 修复
- Pre-Marshmallow 实现现在在从已执行任务的进程死亡中恢复时更可靠。
- 通过
observeForever
观察的LiveData
通过 WorkManager 进行跟踪。这是 Room 库修复的回溯。b/74477406 Data.Builder.build()
现在在序列化对象超出其最大大小时会抛出异常。这以前只会在您无法正确处理的后台线程中发生。- 进一步区分了已停止和已取消的工作;
getWorkInfoById()
将在ListenableWorker.onStopped()
期间返回WorkInfo
,其State
为CANCELLED
。 - 在
ListenableWorker
中将null
Result
视为失败。b/120362353 - 针对运行 API 24 的 Shield 平板电脑有时会抛出
IllegalArgumentException
的推测性修复。b/119484416
破坏性 API 更改
- 由于 Firebase JobDispatcher 即将弃用,已移除对其的支持。这意味着
work-firebase
工件在我们进入 beta 阶段后将不再更新。我们将在未来考虑添加替代方案。 - 将
Payload
合并到Result
中。Result
现在是一个“密封类”,具有三个具体实现,您可以通过Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
)和Result.retry()
获取它们。您的ListenableFuture
现在返回Result
而不是Payload
。Worker
不再具有用于输出Data
的 getter 和 setter 方法。 - 添加了
Operation.await()
和ListenableFuture.await()
Kotlin 扩展方法。 - 将
Operation.getException()
重命名为Operation.getThrowable()
。 ContentUriTriggers
类及其引用的方法不再可供公共使用。- 移除了
WorkManager
、WorkContinuation
和OneTimeWorkRequest
中其余的可变参数方法,以简化 API。要解决任何构建问题,您可以将现有可变参数包装在Arrays.asList(...)
中。我们仍然包含每个方法的单参数版本。 - 移除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们呈现了一个令人困惑的 API;现有的combine
方法更易于理解。
版本 1.0.0-alpha11
2018 年 11 月 8 日
此版本包含许多将在 beta
版中变为稳定 API 的更改。此版本中有破坏性 API 更改;请参阅下面的破坏性 API 更改部分。
API 变更
work-runtime-ktx
引入了一个新的CoroutineWorker
。WorkStatus
已重命名为WorkInfo
。所有相应的getStatus
方法变体已重命名为相应的getWorkInfo
变体。这是一个破坏性更改。ListenableWorker.onStopped()
不再接受表示WorkRequest
是否被取消的布尔参数。WorkManager
不再进行此区分。这是一个破坏性更改。androidx.work.test
包已重命名为androidx.work.testing
包。这是一个破坏性更改。Constraints
上的 setter 不再是公共 API 的一部分。这是一个破坏性更改。WorkerParameters.getTriggeredContentUris()
和WorkerParameters.getTriggeredContentAuthorities()
之前返回数组。现在这些方法返回 Collection。这是一个破坏性更改。ListenableWorker.onStartWork()
已重命名为ListenableWorker.startWork()
。这是一个破坏性更改。WorkStatus
的构造函数不再是公共 API 的一部分。这是一个破坏性更改。Configuration.getMaxJobSchedulerID()
和Configuration.getMinJobSchedulerID()
已分别重命名为Configuration.getMinJobSchedulerId()
和Configuration.getMaxJobSchedulerId()
。这是一个破坏性更改。- 在公共 API 中添加了许多
@NonNull
注解,以改善 API 的人体工程学。 - 添加
WorkManager.enqueueUniqueWork()
API,用于排队唯一的OneTimeWorkRequest
,而无需创建WorkContinuation
。 WorkManager
上enqueue
和cancel
方法的所有变体现在都返回一个新的Operation
类型。这是一个破坏性更改。enqueue
的所有变体不再接受WorkRequest
的可变参数。这是一个破坏性更改。请改用 Collections。您可以使用Arrays.asList()
来修改现有代码。我们这样做是为了减少 API 表面和方法计数。- 尝试在每个进程中多次
initialize
WorkManager
现在将导致IllegalStateException
。这是一个破坏性更改。
Bug 修复
work-runtime-ktx
工件中的WorkRequest.Builder
现在使用ListenableWorker
。修复了 b/117666259- 确保
PeriodicWork
的下一次运行时间在未来。修复了 b/118204399 - 在使用 WorkManager 启动应用程序时,移除了潜在的磁盘 I/O。修复了 b/117796731
- 修复了
WorkConstraintsTracker
中的竞争条件。修复了 android-workmanager/issues/56
破坏性 API 更改
WorkStatus
已重命名为WorkInfo
。所有相应的getStatus
方法变体已重命名为相应的getWorkInfo
变体。ListenableWorker.onStopped()
不再接受表示WorkRequest
是否被取消的布尔参数。WorkManager
不再进行此区分。androidx.work.test
包已重命名为androidx.work.testing
包。Constraints
上的 setter 不再是公共 API 的一部分。WorkerParameters.getTriggeredContentUris()
和WorkerParameters.getTriggeredContentAuthorities()
之前返回数组。现在这些方法返回 Collections。ListenableWorker.onStartWork()
已重命名为ListenableWorker.startWork()
。WorkStatus
的构造函数不再是公共 API 的一部分。Configuration.getMaxJobSchedulerID()
和Configuration.getMinJobSchedulerID()
已分别重命名为Configuration.getMinJobSchedulerId()
和Configuration.getMaxJobSchedulerId()
。WorkManager
上enqueue
和cancel
方法的所有变体现在都返回一个新的Operation
类型。enqueue
的所有变体不再接受WorkRequest
的可变参数。- 尝试在每个进程中多次
initialize
WorkManager
现在将导致IllegalStateException
。
版本 1.0.0-alpha10
2018 年 10 月 11 日
此版本支持开发者控制的异步工作。此版本中有破坏性 API 更改;请参阅下面的破坏性 API 更改部分。
我们预计 WorkManager 即将进入其 alpha 阶段的最后阶段。我们希望在 beta 版中实现 API 稳定,因此请花一些时间在我们的问题跟踪器上提交您的反馈。
API 变更
- 移除了所有先前
已弃用
的方法和类,特别是默认的Worker
构造函数。这是一个破坏性 API 更改。 - 将
NonBlockingWorker
重命名为ListenableWorker
,它现在是一个未隐藏的公共类,可以投入使用。ListenableWorker
提供对一个抽象方法ListenableFuture<Payload> onStartWork()
的访问,该方法在主线程上调用。异步启动和处理工作由您决定。完成后,您应该相应地更新ListenableFuture
。参考实现ListenableFuture
在alpha02
中的Futures
包中提供(请参阅下面的WorkManager
部分)。Worker
扩展了ListenableWorker
,并且仍然像以前一样运行,带有一个抽象的Result doWork()
方法。- 将
Worker
中的一些方法和成员移到了ListenableWorker
。 - 我们很快将为使用 Kotlin 协程(一旦稳定版本发布)和 RxJava2 的
ListenableWorker
提供参考实现。
- 接口
WorkerFactory
和具体实现DefaultWorkerFactory
已合并到一个名为WorkerFactory
的抽象类中。该实现确保对于任何用户创建的WorkerFactory
实例,默认的基于反射的行为作为最后的尝试被调用。这是一个破坏性更改。 - 移除了
WorkManager.synchronous()
和WorkContinuation.synchronous()
以及所有相关方法。在 API 的许多方法中添加了ListenableFuture<Void>
作为返回类型。这是一个破坏性 API 更改。- 您现在可以使用
ListenableFuture
同步获取和观察。例如,WorkManager.enqueue()
以前返回void
;它现在返回ListenableFuture<Void>
。您可以调用ListenableFuture.addListener(Runnable, Executor)
或ListenableFuture.get()
以在操作完成后运行代码。 - 请注意,这些
ListenableFuture
不会告诉您操作是成功还是失败;只告诉您它们已完成。您仍然需要链式调用 WorkManager 方法才能找到此信息。 - 我们忽略了这些对象上的
cancel()
调用,因为它们令人困惑且难以理解(您是取消操作还是取消生成的工作?)。这符合Future
契约。 - 为了与同步
getStatus*
方法保持一致,我们提供了ListenableFuture
变体,并将返回LiveData
的现有方法重命名为显式地包含“LiveData”作为名称的一部分(例如,getStatusesByIdLiveData(UUID)
)。这是一个破坏性 API 更改。
- 您现在可以使用
Bug 修复
- 修复了 alpha09 中关于重复
androidx-annotations.pro
文件的已知问题。您可以通过从 gradle 文件中删除exclude 'META-INF/proguard/androidx-annotations.pro'
来移除之前版本说明中的解决方法。 - 添加了 proguard 配置以保留新的
Worker
构造函数。b/116296569 - 修复了工作被
REPLACE
时的竞争条件中潜在的NullPointerException
。b/116253486 和 b/116677275 WorkContinuation.combine()
现在接受一个或多个WorkContinuation
而不是两个或更多。b/117266752
破坏性 API 更改
- 移除了所有先前
已弃用
的方法和类,特别是默认的Worker
构造函数。 - 接口
WorkerFactory
和具体实现DefaultWorkerFactory
已合并到一个名为WorkerFactory
的抽象类中。 - 移除了
WorkManager.synchronous()
和WorkContinuation.synchronous()
。 WorkManager.getStatus*()
方法现在返回ListenableFuture
。WorkManager.getStatus*LiveData()
返回LiveData
。
版本 1.0.0-alpha09
2018 年 9 月 19 日
已知问题
如果您遇到以下问题:“找到多个具有 OS 独立路径 'META-INF/proguard/androidx-annotations.pro' 的文件”,请将以下内容放入您的 gradle 文件中作为临时解决方法,我们将在 alpha10 中修复此问题
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Bug 修复
- 添加了解决“100 个作业”错误所需的另一个修复。b/115560696
- 添加了一些针对由于竞争条件导致的外部键约束错误的修复。b/114705286
- 将
ConstraintTrackingWorker.onStopped(boolean)
调用委派给底层Worker
。b/114125093 - 强制执行 Firebase JobDispatcher 的正确最小退避延迟。b/113304626
- 改进了库内部的线程保证。
- 纠正了内部
LiveData
重复数据删除的潜在问题。
API 变更
- 您现在可以通过在
WorkManager.Configuration
中指定WorkerFactory
来在运行时创建自己的Worker
实例。回退工厂是DefaultWorkerFactory
,它与 WorkManager 早期版本的行为匹配。Worker
和NonBlockingWorker
的默认构造函数现在被标记为弃用。请使用新的构造函数(Worker(Context, WorkerParameters)
)并调用super(Context, WorkerParameters)
;WorkManager 的未来版本将移除默认构造函数。
- 我们已经开始在内部使用新的
ListenableFuture
工件(不含 Guava 依赖项)。我们将在未来的版本中将 ListenableFutures 引入 API。此更改将支持最终公开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)
的返回类型注解从@NonNull
更改为@Nullable
。b/112275229
API 变更
Worker
现在扩展了一个新类NonBlockingWorker
。这不会影响任何当前用法。未来,NonBlockingWorker
将成为完全支持的实体,用于自定义线程解决方案。- 将
Data.getBooleanArray(String)
和Data.getIntArray(String)
的返回类型注解从@NonNull
更改为@Nullable
。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
现在可以正确重新调度。 - 修复了强制停止或重启后重新调度所有工作器时潜在的 ANR。b/110507716
- 为各种 WorkManager API 添加了可空性注解。b/110344065
- 记录工作器执行期间发生的未捕获异常。b/109900862
- 允许破坏性数据库迁移,以防您决定回滚到旧版本的 WorkManager。b/74633270
- 修复了创建重复隐式标签时的迁移崩溃。这是一个非常罕见的问题,仅当您自己使用相同的隐式标签格式时才会发生。
版本 1.0.0-alpha03
2018 年 6 月 19 日
Bug 修复
修复了基于
AlarmManager
的实现中的竞争条件。b/80346526。修复了设备重启后使用
JobScheduler
时出现的重复作业问题。带有内容 URI 触发器的作业现在在重启后仍然存在。b/80234744
修复了重新排队
WorkRequest
时的崩溃。b/109572353。修复了使用
work-runtime-ktx
依赖项时出现的 Kotlin 编译器警告。WorkManager 现在使用
Room
版本1.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/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
允许您排队唯一的PeriodicWorkRequest
。b/79600647WorkManager.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 - 修复了导致
Worker
在Application.onCreate()
上重新调度的问题。b/79660657 - 修复了您可以调度超出操作系统允许的工作量的问题。b/79497378
- 将与
Worker
相关的唤醒锁清理移动到后台线程。 - 当所有待定工作完成后,
AlarmManager
实现现在可以正确清理。 - 修复了影响非英语语言环境的清理 SQL 查询。b/80065360
- 添加了对
Data
中float
的支持。b/79443878 Data.Builder.putAll()
现在返回Builder
的实例。b/79699162- 更多 javadoc 和文档修复。b/79691663
API 变更
Worker
可以响应停止。Worker.isStopped()
可用于检查Worker
是否已停止。Worker.onStopped()
可用于执行轻量级清理操作。Worker.getTags()
API 返回与Worker
关联的标签Set
。- 为接受持续时间和
TimeUnit
组合的 API 添加了javax.time.Duration
重载。这受@RequiresApi(26)
保护。 - WorkManager 扩展已从
androidx.work.ktx
包移动到androidx.work
包。旧的扩展已弃用,并将在未来版本中移除。 Configuration.withExecutor()
已弃用。请改用Configuration.setExecutor()
。
版本 1.0.0-alpha01
2018 年 5 月 8 日
WorkManager 简化了有保证、约束感知的后台工作的调度和执行。此初始版本为 1.0.0-alpha01
。