WorkManager
最新更新 | 稳定版 | 候选版 | 测试版 | Alpha 版 |
---|---|---|---|---|
2024 年 10 月 30 日 | 2.9.1 | - | - | - |
声明依赖项
要添加对 WorkManager 的依赖项,您必须将 Google Maven 代码库 添加到您的项目中
在应用或模块的 build.gradle
文件中添加所需构件的依赖项
Groovy
dependencies { def work_version = "2.9.1" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.9.1" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
有关使用 Kotlin 扩展的信息,请参阅 ktx 文档。
有关依赖项的更多信息,请参阅 添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新的问题或有改进此库的想法,请告知我们。在创建新问题之前,请查看此库中 现有问题。您可以通过点击星号按钮为现有问题投票。
更多信息请参见问题跟踪文档。
2.10 版本
2.10.0 版本
2024 年 10 月 30 日
已发布 androidx.work:work-*:2.10.0
。2.10.0 版本包含这些提交。
自 2.9.1 版本以来的重大更改
- 为
WorkManager
中的作业添加了跟踪标签,这使得“adb shell dumpsys jobscheduler”更容易理解,因为它将包含正在执行的 Worker 的名称。还在WorkManager
的关键区域添加了跟踪部分。 - 添加了
Configuration.workerCoroutineContext
用于控制CoroutineWorker
的执行调度程序。 - 开发人员可以通过
Constraints.setRequiredNetworkRequest
方法指定NetworkRequest
作为 Worker 的约束条件。这使得可以更精细地控制此 Worker 应运行的网络。 WorkManager
2.10.0 现在使用 SDK 35 编译,并包含各种 SDK 35 兼容性更改。
2.10.0-rc01 版本
2024 年 10 月 24 日
已发布 androidx.work:work-*:2.10.0-rc01
。2.10.0-rc01 版本包含这些提交。
2.10.0-beta01 版本
2024 年 10 月 2 日
已发布 androidx.work:work-*:2.10.0-beta01
。2.10.0-beta01 版本包含这些提交。
2.10.0-alpha04 版本
2024 年 9 月 18 日
已发布 androidx.work:work-*:2.10.0-alpha04
。2.10.0-alpha04 版本包含这些提交。
API 更改
- 添加停止原因
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
,用于当由于基于前台服务类型的执行超时而停止前台 Worker 时。(Ibd0af)
2.10.0-alpha03 版本
2024 年 9 月 4 日
已发布 androidx.work:work-*:2.10.0-alpha03
。2.10.0-alpha03 版本包含这些提交。
新功能
- 为
WorkManager
中的作业添加了跟踪标签,这使得“adb shell dumpsys jobscheduler”更容易理解,因为它将包含正在执行的 Worker 的名称。还在WorkManager
的关键区域添加了跟踪部分。
API 更改
- WorkManager 2.10.0 现在使用 SDK 35 编译。
- 修复了类型为“短服务”和“数据同步”的前台 Worker 超时并导致 ANR 的问题,当
WorkManager
未调用stopSelf()
时。此修复程序仅适用于安装了 API 34 和 35 的设备(在这些设备上引入了前台服务类型)。(ca06b2,b/364508145) - 新的
WorkerParameters
API,可以使用它在使用WorkerFactory
时切换Worker
绑定的远程进程。(Ibdc8a,Ie8a90,I7373f)
错误修复
- 修复了
WorkManager
尝试重新启动长时间运行的 Worker(即前台 Worker)时发生的崩溃,此时工作的前台类型具有已被撤销的 Android 14 先决条件权限。(b/333957914) - 删除了对新平台 API 的手动访问概述,因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有构建中,这会通过 API 建模自动完成。建议未使用 AGP 的客户端更新到 D8 版本 8.1 或更高版本。有关更多详细信息,请参见这篇文章。(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 版本包含这些提交。
错误修复
- 修复了
WorkManager
尝试重新启动长时间运行的 Worker(即前台 Worker)时发生的崩溃,此时工作的前台类型具有已被撤销的Android 14 先决条件权限。(b/333957914)
2.9.0 版本
2023 年 11 月 29 日
已发布 androidx.work:work-*:2.9.0
。2.9.0 版本包含这些提交。
自 2.8.0 版本以来的重要更改
- 通过
Flow
进行可观察性。Worker 的进度现在可以通过WorkManager.getWorkInfosFlow
和类似方法通过 Flow 进行观察,而不是LiveData
。 - 现在
WorkManager
提供了有关先前停止 Worker 原因的提示。可以通过getStopReason()
方法从 Worker 本身查询,也可以通过getStopReason()
从WorkInfo
查询。 - 通过
setNextScheduleTimeOverride
精确调度周期性 Worker。这允许动态计算下一个周期性工作的计划,可用于实现高级功能,例如自适应刷新时间、自定义重试行为或在用户每天早上醒来之前运行新闻源 Worker,而不会出现漂移。ExistingPeriodicWorkPolicy.UPDATE
应与这些技术一起使用,以避免在调度下一个 Worker 时取消当前正在运行的 Worker。 - WorkManager 的线程测试与生产环境匹配。
ExecutorsMode.PRESERVE_EXECUTORS
可用于initializeTestWorkManager
以保留在Configuration
中设置的执行器并使用真正的主线程。 - 协程 API(例如
CoroutineWorker
)已从附加工件 work-runtime-ktx 移动到主工件 work-runtime。work-runtime-ktx 现在为空。
API 更改
stopReason
已添加到WorkInfo
。它使在 Worker 运行后可以访问stopReason
。这在以可用的方式报告stopReason
时可能很有用,因为一旦 Worker 被停止,应用程序本身可能会很快被终止。(I21386)- 允许通过配置设置
Clock
并将其用于驱动 Worker 测试的执行顺序。(Ic586e) - 已向
ListenableWorker
添加getStopReason()
方法,该方法提示 Worker 停止的原因。(I07060) - 添加了
WorkManagerTestInitHelper#closeWorkDatabase()
以避免 Closeguard 关于泄漏资源的警告。(Ia8d49) WorkInfo
的构造函数现在是公共的,这在测试中很有用。(Ia00b6,b/209145335)work-runtime-ktx
现在为空,CoroutineWorker
和其他 Kotlin 特定实用程序现在可在主 work-runtime 工件中使用。(I71a9a)- 添加了
setNextScheduleTimeOverride
方法,允许精确设置周期性工作计划(I3b4da) - 添加了
getNextScheduleTimeMillis
以获取已添加的已计划运行时间信息到WorkInfo
。(I797e4) - 初始延迟和周期性信息已添加到
WorkInfo
。(I52f2f) - 添加了通过方法
getWorkInfosByTagFlow
、getWorkInfoByIdFlow
、getWorkInfosForUniqueWorkFlow
、getWorkInfosFlow
通过 Flow 观察 Worker 的方法(If122a) - 向
Constraints
的构造函数和属性添加了缺少的@RequiresApi(...)
注释。它们现在与自早期版本的WorkManager
以来存在的Constraints.Builder
中的 setter 上的相应注释对齐。(I6d7d2) - 现在,
WorkManager
对内容 URI Worker 具有单独的限制,以便在高负载下为它们提供JobScheduler
中的保证插槽,以防止错过内容更新。可以通过Configuration.Builder.setContentUriTriggerWorkersLimit
配置此限制。(Ic128f) - 约束条件已添加到
WorkInfo
。(I162c0)
2.9.0-rc01 版本
2023 年 10 月 18 日
已发布 androidx.work:work-*:2.9.0-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 原因的提示。可以通过getStopReason()
方法从 Worker 本身查询,也可以通过getStopReason()
从WorkInfo
查询。
API 更改
- 将
stopReason
添加到WorkInfo
中。它在 worker 运行后提供stopReason
。这有助于以可用的方式报告stopReason
,因为一旦 worker 被停止,应用程序本身可能会很快被杀死。(I21386) - 允许通过配置设置 Clock,并用于驱动 Worker 测试的执行顺序。(Ic586e)
- 已向
ListenableWorker
添加getStopReason()
方法,该方法提示 Worker 停止的原因。(I07060) - 添加了
WorkManagerTestInitHelper#closeWorkDatabase()
以避免 Closeguard 关于泄漏资源的警告。(Ia8d49)
错误修复
- 添加了使用
TestDriver
跳过overrideNextScheduleTime
的功能,并修复了可测试性问题。(Ic2905)
2.9.0-alpha01 版本
2023年6月7日
已发布 androidx.work:work-*:2.9.0-alpha01
。 2.9.0-alpha01 版本包含以下提交。
新功能
- 通过
Flow
进行可观察性。Worker 的进度现在可以通过WorkManager.getWorkInfosFlow
和类似方法通过 Flow 进行观察,而不是LiveData
。 - 通过
setNextScheduleTimeOverride
精确调度周期性 worker。这允许动态计算下一个周期性工作计划,可用于实现高级功能,例如自适应刷新时间、自定义重试行为或在用户每天早上醒来之前运行新闻推送 worker,而不会出现漂移。应将ExistingPeriodicWorkPolicy.UPDATE
与这些技术一起使用,以避免在调度下一个 worker 时取消当前正在运行的 worker。 - 使用与生产环境匹配的线程对
WorkManager
进行测试。可以使用ExecutorsMode.PRESERVE_EXECUTORS
保留在Configuration
中设置的执行器并使用真正的主线程。 - 诸如
CoroutineWorker
之类的协程 API 已从附加构件work-runtime-ktx
移动到主构件work-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) - 添加了通过方法
getWorkInfosByTagFlow
、getWorkInfoByIdFlow
、getWorkInfosForUniqueWorkFlow
、getWorkInfosFlow
通过 Flow 观察 Worker 的方法(If122a) - 为 Constraints 的构造函数和属性添加了缺少的
@RequiresApi(...)
注释。它们现在与WorkManager
早期版本中存在的Constraints.Builder
中的 setter 上的相应注释保持一致。(I6d7d2) WorkManager
现在对内容 URI worker 有一个单独的限制,以便为它们在JobScheduler
中提供保证的槽位,以防止在高负载下错过内容更新。可以通过Configuration.Builder.setContentUriTriggerWorkersLimit
配置限制。(Ic128f)- 约束条件已添加到
WorkInfo
。(I162c0)
2.8 版本
2.8.1 版本
2023年3月22日
已发布 androidx.work:work-*:2.8.1
。 2.8.1 版本包含以下提交。
错误修复
- 修复了
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
现在都有setForeground
返回Completable
,可以替代返回ListenableFuture
的setForegroundInfoAsync
。 - RxJava 2 和 RxJava 3 的
RxWorker
都有getForegroundInfo
返回Single
,可以替代返回ListenableFuture
的getForegroundInfoAsync
。(b/203851459) - 现在可以直接构造 Constraints,而不是使用
Constraints.Builder
,这对 Kotlin 用户来说很方便。(Idc390,b/137568653) - 添加了检查
WorkManager
是否已初始化的功能。此外,还为库开发者添加了一个新的getConfiguration()
API,用于获取WorkManager
初始化时使用的配置。(I6eff3,b/212300336)
错误修复
- 修复了贪婪调度程序中的一个问题,该问题会阻止 worker 在负载过重时立即运行。(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 版本包含以下提交。
错误修复
- 修复了
WorkInfo
中的equals
方法,该方法以前没有考虑新的生成信息。(4977cc)
2.8.0-beta01 版本
2022年10月5日
已发布 androidx.work:work-*:2.8.0-beta01
。 2.8.0-beta01 版本包含以下提交。
错误修复
- 修复了贪婪调度程序中的一个问题,该问题会阻止 worker 在负载过重时立即运行。(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()
方法,用于返回工作者的代数。如果工作者通过WorkManager.updateWork
或WorkManager.enqueueUniquePeriodicWork
使用ExistingPeriodicWorkPolicy.UPDATE
更新过,则它可能有多个代数。请注意,如果工作者当前正在运行,并且在执行过程中发生了更新,则此方法可能会返回比当前运行的工作者更新的代数。(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)
错误修复
- 在 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)
- 向
Worker
添加了getForegroundInfo
。(Ic1ead) - 添加了辅助方法
WorkQuery.fromIds
以直接从 ID 创建 WorkQuery。(Ie5bdf,b/199919736) - RxWorker 现在有
setForeground
返回Completable
,可以替代返回ListenableFuture
的setForegroundInfoAsync
。(I85156) - 适用于 RxJava 2 的 RxWorker 现在有
getForegroundInfo
返回Single
,可以替代返回ListenableFuture
的getForegroundInfoAsync
。(I21c91,b/203851459) - 适用于 RxJava 3 的 RxWorker 现在有
getForegroundInfo
返回Single
,可以替代返回ListenableFuture
的getForegroundInfoAsync
。(I1ca8a) - RxWorker 现在有
setForeground
返回Completable
,可以替代返回ListenableFuture
的setForegroundInfoAsync
。(I992a3,b/203851459)
错误修复
- 在使用
suspendCancellableCoroutine
时,将CoroutineScope
中的取消传播到ListenableFuture
。(I77e63)
版本 2.7
版本 2.7.1
2021年11月17日
发布了 androidx.work:work-*:2.7.1
。 版本 2.7.1 包含这些提交。
错误修复
- 在使用
suspendCancellableCoroutine
时,将CoroutineScope
中的取消传播到ListenableFuture
。(I77e63) - 将延迟的工作请求标记为快速处理时,会立即抛出异常。bef1762
版本 2.7.0
2021年10月13日
发布了 androidx.work:work-*:2.7.0
。 版本 2.7.0 包含这些提交。
自 2.6.0 版本以来的重要更改
WorkManager 引入了一个新的
WorkRequest.Builder.setExpedited(...)
API,以帮助解决 Android 12 中的前台服务限制。使用
setExpedited(...)
时,WorkManager 从 Android 12 开始委托给 JobScheduler 中的快速作业,同时通过委托给前台服务在早期版本的 Android 上提供向后兼容性。
版本 2.7.0-rc01
2021年9月29日
发布了 androidx.work:work-*:2.7.0-rc01
。 版本 2.7.0-rc01 包含这些提交。
此版本与 androidx.work:work-*:2.7.0-beta01
相同。
版本 2.7.0-beta01
2021年9月1日
发布了 androidx.work:work-*:2.7.0-beta01
。 版本 2.7.0-beta01 包含这些提交。
新功能
- 减少初始化 WorkManager 时的多进程 SQLite 争用。
API 更改
- 鉴于 Android 12 (S) 的底层平台 API 已经稳定,因此删除了
@ExperimentalExpeditedWork
API。(aosp/1792806)
错误修复
- 为未实现
getForegroundInfoAsync()
的快速工作者提供更好的错误消息。(aosp/1809376)
版本 2.7.0-alpha05
2021年7月21日
发布了 androidx.work:work-*:2.7.0-alpha05
。 版本 2.7.0-alpha05 包含这些提交。
此版本还包含来自 WorkManager 2.6.0-beta02
版本的错误修复。
版本 2.7.0-alpha04
2021年6月2日
发布了 androidx.work:work-*:2.7.0-alpha04
。
此版本还包含来自 2.6.0-beta01 版本的更改。
API 更改
ListenableWorker.setForegroundAsync()
现已不再弃用。- 我们建议尽可能使用
WorkRequest.Builder.setExpedited(...)
API。为了更好地支持 应用不受前台服务限制 的情况,开发者可以使用ListenableWorker.setForegroundAsync()
API。 - 如果在应用受前台服务限制时调用
ListenableWorker.setForegroundAsync()
,则会抛出 ForegroundServiceStartNotAllowedException。
错误修复
- 重新调度快速作业时,它们不再是快速作业。它们变为常规作业。
版本 2.7.0-alpha03
2021年4月21日
发布了 androidx.work:work-*:2.7.0-alpha03
。 版本 2.7.0-alpha03 包含这些提交。
新功能
来自 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 版本包含以下提交。
错误修复
- 明确
PendingIntent
的可变性,以修复面向 Android 12 时发生的崩溃。(b/180884673)
2.7.0-alpha01 版本
2021年2月18日
androidx.work:work-*:2.7.0-alpha01
已发布。2.7.0-alpha01 版本包含以下提交。
新功能
WorkManager 引入了一个新的
WorkRequest.Builder.setExpedited(...)
API,以考虑 Android 12 中的前台服务限制。应用程序在后台时不再能够启动前台服务。因此,为了更好地支持以前绑定到前台服务生命周期的长时间运行工作,应用程序可以将
WorkRequest
标记为紧急 (expedited)。此 API 替代了现已弃用的
setForegroundAsync(...)
/setForeground(...)
API。使用
setExpedited(...)
时,WorkManager 从 Android 12 开始委托给JobScheduler
中的紧急作业,同时通过委托给前台服务在早期版本的 Android 上提供向后兼容性。
API 更改
- 添加对紧急
WorkRequest
的支持。
2.6.0 版本
2.6.0 版本
2021年9月1日
androidx.work:work-*:2.6.0
已发布。2.6.0 版本包含以下提交。
自 2.5.0 版本以来的重要更改
WorkManager 现在使用
androidx.startup
初始化 WorkManager。如果您过去使用tools:node="remove"
删除用于初始化 WorkManager 的ContentProvider
,则需要改用以下方法。<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" />
添加了对可在任何进程中运行的 Worker 的支持。(Iaf200)
添加了
RemoteCoroutineWorker
,它是RemoteListenableWorker
的实现,可以绑定到远程进程。(I30578)
2.6.0-rc01 版本
2021年8月4日
androidx.work:work-*:2.6.0-rc01
已发布。2.6.0-rc01 版本包含以下提交。
此版本与 androidx.work:work-*:2.6.0-beta02
相同。
2.6.0-beta02 版本
2021年7月21日
androidx.work:work-*:2.6.0-beta02
已发布。2.6.0-beta02 版本包含以下提交。
错误修复
RemoteWorkManager
现在可以从RemoteWorkManagerService
正确解除绑定,从而允许RemoteWorkManagerService
正确清理。(aosp/1730694)RemoteListenableWorker
现在可以从RemoteWorkerService
正确解除绑定,从而允许RemoteWorkerService
正确清理。(aosp/1743817)ForceStopRunnable
现在仅在主应用程序进程中运行。这是一个优化,避免了使用多个进程的应用程序的资源竞争。(aosp/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()
提供多进程 Worker 支持。(Ib6d08) - 将
WorkManagerInitializer
设置为公共,以便其他androidx.startup.Initializer
可以将其用作依赖项。(I5ab11)
2.6.0-alpha01 版本
2021年3月24日
androidx.work:work-*:2.6.0-alpha01
已发布。2.6.0-alpha01 版本包含以下提交。
新功能
WorkManager
现在使用androidx.startup
初始化 WorkManager。以前,这是由androidx.work.impl.WorkManagerInitializer
完成的。(aosp/1608813)如果您过去使用
tools:node="remove"
删除用于初始化进程生命周期的ContentProvider
,则需要改用以下方法。<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.impl.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(或)
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
API 更改
- 添加了
Result.getOutputData()
API,该 API 返回 ListenableWorker 的outputData
。(Ie51e3)
错误修复
- 添加了解决方案,用于解决使用
AlarmManager
API 时抛出SecurityException
的 OEM 错误。(aosp/1587518)
2.5.0 版本
2.5.0 版本
2021年1月27日
androidx.work:work-*:2.5.0
已发布。2.5.0 版本包含以下提交。
自 2.4.0 版本以来的重大更改
- 一个新的
:work:work-multiprocess
工件,用于使用多个进程的应用。这通过将工作请求调度统一到单个进程来提高性能。- 要使用
work-multiprocess
,请定义对以下内容的依赖项:implementation "androidx.work:work-multiprocess:2.5.0"
- 使用 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 检查器。
2.5.0-rc01 版本
2021年1月13日
androidx.work:work-*:2.5.0-rc01
已发布。2.5.0-rc01 版本包含以下提交。
错误修复
- 修复了一个错误,该错误导致在使用基于
WorkQuery
的 API 时,实体更新后getWorkInfosLiveData
未正确失效。(aosp/1540566,b/173769028) - 修复了一个错误,在某些极少数情况下,数据库事务不会被标记为成功。这会在某些摩托罗拉设备上造成问题。(aosp/1535368,b/175944460)
- 修复了一个错误,在尝试从已死亡的进程中解绑时,忽略
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版本包含这些提交。
错误修复
- 修复了
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)
错误修复
- 当
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)
错误修复
- 使用
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版本包含这些提交。
新功能
- 添加了一个API到WorkQuery,可以使用
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)
错误修复
- 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
工具。敬请关注更多更新。
错误修复
- 在某些设备上跟踪网络状态时处理
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
的大小限制)。这意味着当应用程序处于前台时,应用程序现在可以执行更多WorkRequests
。为了管理在前台执行延迟工作,WorkManager
还引入了一个新的可配置的RunnableScheduler
。(aosp/1185778)- WorkManager现在支持RxJava 3。要使用RxJava 3,您应该包含以下依赖项:
implementation "androidx.work:work-rxjava3:2.4.0"
。(aosp/1277904) - 添加了使用
WorkQuery
查询WorkInfo
的功能。当开发者想要通过多个属性的组合来查询WorkInfo
时,这很有用。有关更多信息,请查看WorkQuery.Builder.fromStates(...)
、WorkQuery.Builder. fromTags(...)
或WorkQuery.Builder.fromUniqueWorkNames(...)
。(aosp/1253230,b/143847546) 添加了使用以下方法从
WorkManager
请求诊断信息的功能:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
这提供了许多有用的信息,包括:
- 过去24小时内完成的WorkRequests。
- 当前正在运行的WorkRequests。
- 已计划的WorkRequests。(aosp/1235501)
添加
ExistingWorkPolicy.APPEND_OR_REPLACE
,它类似于APPEND
,但会替换具有已取消或失败先决条件的链。(b/134613984,aosp/1199640)提供添加自定义
RunnableScheduler
来跟踪将来需要执行的WorkRequests的功能。进程内调度程序使用此功能。(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)修复了一个bug,该bug导致
WorkManager
尝试执行绑定到前台服务的Worker
的多个实例(b/156310133,aosp/1309853)
2.4.0-rc01版本
2020年6月24日
发布了androidx.work:work-*:2.4.0-rc01
。2.4.0-rc01版本包含这些提交。
错误修复
- 进程内调度程序现在使用更好的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版本包含这些提交。
错误修复
- 修复了一个错误,即在前台
Worker
中断后,ForegroundService
未停止。(b/155579898,aosp/1302153) - 修复了一个bug,该bug导致
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)
错误修复
- 跟踪设备网络状态时忽略
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)
错误修复
- 修复了检查
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小时内完成的WorkRequests。
- 当前正在运行的WorkRequests。
- 已计划的WorkRequests。(aosp/1235501)
新的Lint规则强制执行:
- 使用
setForegroundAsync()
API时使用正确的foregroundServiceType
。(b/147873061,aosp/1215915) - 指定
WorkManager
在直接使用JobService
API时应使用的JobScheduler
ID。(aosp/1223567)
- 使用
API 更改
添加了
ExistingWorkPolicy.APPEND_OR_REPLACE
,它类似于APPEND
,但会**替换**具有已取消或失败先决条件的链。(b/134613984,aosp/1199640)提供了向其添加自定义
RunnableScheduler
以跟踪将来需要执行的WorkRequest
的功能。进程内调度程序使用此功能。(aosp/1203944)
错误修复
- 弃用
RxWorker
中的setProgress()
,因为它以前返回Single<Void>
,这是一个不可能的类型。添加了一个新的APIsetCompletableProgress()
,它返回一个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,该bug会导致在超过10分钟的执行窗口后运行长时间运行的
Worker
的多个实例。(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版本包含这些提交。
错误修复
- 修复了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版本包含这些提交。
错误修复
- 更好地管理在活动前台
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
相同
错误修复
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) - 当使用
enqueue()
来执行PeriodicWorkRequest
(而不是enqueueUniquePeriodicWork()
)时,添加了一个 lint 警告。(aosp/1166032)
API 变更
- 使用
ListenableWorker.setForegroundAsync()
时,ForegroundInfo
现在要求您指定要使用的notificationId
。**这是一个重大变更。** 这允许您并行运行多个长时间运行的Worker
。WorkManager
也更好地管理提供的Notification
的生命周期。(b/145473554,aosp/1181208,asop/1181216,asop/1183577)
错误修复
- 修复了 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,该 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)
错误修复
- 修复了一个错误,该错误是由在事务之外不必要地调用
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)
错误修复
- 当排队的
WorkRequest
数量接近 调度限制 时,WorkManager 会公平地调度工作。(aosp/1105766) - 只有在工作尚未完成时,WorkManager 才会调用
ListenableWorker#onStopped()
。(b/140055777) - WorkManager 现在会在工作者中断或达到其终端状态时删除进度信息。(aosp/1114572)
Data
现在具有更有用的toString()
表示。(b/140945323)Data
现在具有更好的equals()
方法。它还支持Array
类型的deepEquals
。(b/140922528)- WorkManager 现在将其内部数据库和首选项文件存储在无备份目录中。(b/114808216)
2.3.0-alpha01 版本
2019 年 8 月 22 日
已发布 androidx.work:work-*:2.3.September 5, 20190-alpha01
。此版本中包含的提交可以在这里找到 这里。
新特性
ListenableWorker
现在可以通过setProgressAsync()
API 设置进度。还在CoroutineWorker
中添加了相应的suspend
setProgress
API,以及在RxWorker
中返回Single<Void>
的setProgress
。通过这些新的 API,工作者可以通过具有相应getProgress
API 的WorkInfo
传达进度信息。(b/79481554)Data
具有containsKey()
API,可用于验证Worker
的输入数据是否具有预期类型的键。(b/117136838)Data
现在可以使用Data.toByteArray()
和Data.fromByteArray()
进行序列化。请注意,Data
没有版本控制保证,因此您不应将其持久化或用于应用程序之间的 IPC。它们仅安全地用于同一个应用程序的多个进程之间。- 添加了通过
Configuration.setInputMergerFactory
指定InputMergerFactory
的功能。(b/133273159)
API 变更
- 如果
WorkerFactory
返回先前已调用的ListenableWorker
实例,WorkManager 将抛出IllegalStateException
实例。(b/139554406) - 更新了关于
ListenableFuture
取消和ListenableWorker
中的onStopped()
回调的文档。(b/138413671)
错误修复
- 进程内调度程序现在会忽略具有
idle
约束的WorkRequest
。这些请求现在只有在设备实际处于idle
状态时才会被JobScheduler
拾取。(aosp/1089779) TestScheduler
现在会在测试中正确地为其内部任务执行程序使用指定的Executor
。(aosp/1090749)
2.2.0 版本
2.2.0 版本
2019 年 8 月 15 日
已发布 androidx.work:work-*:2.2.0
。此版本中包含的提交可以在这里找到 这里。
此版本与 androidx.work:work-*:2.2.0-rc01
相同。
2.2.0 与 2.1.0 的重要变更
androidx.work:work-gcm:2.2.0
是一个新的 Maven 工件,当 Google Play 服务可用于 API 等级 <= 22 时,它支持使用 GCMNetworkManager 作为调度程序。这是一个可选依赖项,有助于在较旧的 API 版本上更可靠且更高效地进行后台处理。如果您的应用使用 Google Play 服务,请将此依赖项添加到您的 gradle 文件中,以自动获得 GCMNetworkManager 支持。如果 Play 服务不可用,WorkManager 将继续在较旧的设备上回退到 AlarmManager。
2.2.0-rc01 版本
2019 年 7 月 30 日
已发布 androidx.work:work-*:2.2.0-rc01
。此版本中包含的提交可以在这里找到 这里。
错误修复
- 修复了 AlarmManager 实现中的一个错误,该错误在极少数情况下会导致服务过早关闭并导致
RejectedExecutionException
。(aosp/1092374)(b/138238197)。 - 为在某些设备上使用
JobScheduler
API 时出现的NullPointerException
添加了一个解决方法。(aosp/1091020)(b/138364061),(b/138441699)
2.2.0-beta02 版本
2019 年 7 月 19 日
已发布 androidx.work:work-*:2.2.0-beta02
。此版本中包含的提交可以在这里找到 这里。
错误修复
- 删除了在
2.2.0-beta01
中引入的意外 jacoco 依赖项。
2.2.0-beta01 版本
2019 年 7 月 17 日
已发布 androidx.work:work-*:2.2.0-beta01
。此版本中包含的提交可以在这里找到 这里。
新特性
androidx.work:work-gcm:2.2.0-beta01
是一个新的 Maven 工件,在 Google Play 服务可用于 API 等级 <= 22 时,支持使用 GCMNetworkManager 作为调度程序。这是一个可选依赖项,有助于在较旧的 API 版本上实现更可靠和更高效的后台处理。如果您的应用使用 Google Play 服务,请将此依赖项添加到您的 gradle 文件中,以自动获得 GCMNetworkManager 支持。如果 Play 服务不可用,WorkManager 将继续在较旧的设备上回退到 AlarmManager。
错误修复
- 修复了在 Nvidia Shield K1 平板电脑上跟踪网络状态时出现的
IllegalArgumentException
错误。(aosp/1010188)
2.1.0 版本
2.1.0 版本
2019 年 7 月 11 日
androidx.work:work-*:2.1.0
已发布。此版本与androidx.work:work-*:2.1.0-rc01
相同。
自 2.0.1 版本以来的重要更改
work-runtime-ktx
现在需要 Java 8。如果您遇到任何问题,可以将以下内容添加到您的build.gradle
中:kotlinOptions { jvmTarget = "1.8" }
- 添加了 WorkManager 的按需初始化,只有在引用时才会创建 WorkManager。b/127497100 设置项目的按需初始化
- 禁用自动初始化程序.
- 在您的自定义
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
已发布。此版本中包含的提交可以在这里找到 here。
错误修复
- 修复了一个错误,该错误会在备份进行时使用
JobScheduler
执行作业时导致应用程序崩溃b/135858602。
2.1.0-beta02 版本
2019 年 6 月 20 日
androidx.work:work-*:2.1.0-beta02
已发布。此版本中包含的提交可以在这里找到 here。
错误修复
TestListenableWorkerBuilder
现在在创建ListenableWorker
实例时使用正确的WorkerFactory
。b/135275844- 修复了一个错误,该错误会导致由于进程死亡而导致
WorkRequest
的执行窗口出现偏差。b/135272196
2.1.0-beta01 版本
2019 年 6 月 13 日
androidx.work:work-*:2.1.0-beta01
已发布。此版本中包含的提交可以在这里找到 here。
错误修复
- WorkManager 现在依赖于
Room 2.1.0
,这应该可以修复一些数据库问题。 - 删除了一些主线程上的启动磁盘 I/O。
- 修复了约束跟踪中潜在的死锁。b/134361006
- 抢先取消归因于 WorkManager 的无效作业。b/134058261
- 为行为异常的设备添加了一些对 JobScheduler API 的防御性调用。
2.1.0-alpha03 版本
2019 年 6 月 5 日
androidx.work:*:2.1.0-alpha03
已发布。
错误修复
- 改进了
PeriodicWorkRequest
的文档。 WorkManagerTestInitHelper
现在使用正确的后台执行器进行测试。- 修复了一些设备上处理大型事务时出现的 SQLite 问题。(b/130182503)
- WorkManager 的依赖项现在更细粒度。(b/133169148)。
- 解决使用 WorkManager 调度作业时
JobScheduler
实现中特定于 OEM 的错误。 - 改进了基于 AlarmManager 的调度程序中关于服务生命周期的功能,这些功能以前会导致罕见的崩溃。(b/133313734)
2.1.0-alpha02 版本
2019 年 5 月 16 日
WorkManager 2.1.0-alpha02 已发布。此版本包含多个新 API。
API 更改
PeriodicWorkRequest
现在支持初始延迟。您可以使用PeriodicWorkRequest.Builder
上的setInitialDelay
方法设置初始延迟。b/111404867添加了使用
DelegatingWorkerFactory
委托给一个或多个已注册的WorkerFactory
的功能。b/131435993添加了通过
Configuration.Builder.setTaskExecutor
自定义 WorkManager 用于所有内部簿记的Executor
的功能。改进了围绕
WorkRequest.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中。
错误修复
- Robolectric 测试现在可以与 WorkManager 正常运行。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 依赖项的 1.0.0 稳定版本的 AndroidX 版本。我们建议定位此版本而不是旧版 1.x 版本。所有活跃的开发都将以 2.x 为目标,而 1.x 只会在有限的时间内接收关键错误修复。
2.0.0-rc01 版本
2019 年 3 月 7 日
WorkManager 2.0.0-rc01 已发布。此版本与 1.0.0 稳定版相同,但具有 AndroidX 依赖项。一旦达到 2.0.0 稳定版,您应该包含此版本,旧版 1.x 版本将只接收一些关键错误修复。所有活跃的开发都将以 2.x 为目标。
预 AndroidX 依赖项
参考文档:Java
Groovy
dependencies { def work_version = "1.0.1" // (Java only) implementation "android.arch.work:work-runtime:$work_version" // Kotlin + coroutines implementation "android.arch.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "android.arch.work:work-rxjava2:$work_version" // optional - Test helpers androidTestImplementation "android.arch.work:work-testing:$work_version" }
Kotlin
dependencies { val work_version = "1.0.1" // (Java only) implementation("android.arch.work:work-runtime:$work_version") // Kotlin + coroutines implementation("android.arch.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("android.arch.work:work-rxjava2:$work_version") // optional - Test helpers androidTestImplementation("android.arch.work:work-testing:$work_version") }
1.0.1 版本
1.0.1 版本
2019 年 4 月 9 日
WorkManager 1.0.1 已发布。此版本与1.0.1-rc01相同。
请注意,我们强烈建议用户更新到 WorkManager 2.x,因为将来 1.x 分支的更新将非常少。1.x 库也不会发布新的 API。
1.0.1-rc01 版本
2019 年 4 月 2 日
WorkManager 1.0.1-rc01 已发布。此版本包含一些错误修复。
错误修复
- Robolectric 测试现在可以与 WorkManager 正常运行。b/122553577
- 修复了在预 JobScheduler API 上未清理约束跟踪导致的极端情况下的崩溃。b/129226383
- 修复了处理长工作链时出现的
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 稳定版本的第二个候选版本。此版本包含两个错误修复。
错误修复
应用程序崩溃后,
Worker
现在可以正确调度。b/124546316抛出未经检查的
Exception
的Worker
现在被正确标记为FAILED
,并且不再使应用程序进程崩溃。
1.0.0-rc01 版本
2019 年 2 月 14 日
这是 WorkManager 1.0.0 稳定版本的候选版本。此版本包含一个错误修复。
错误修复
- 基于 AlarmManager 的实现现在可以正确遵守
flex
窗口以用于 PeriodicWorkRequests。b/124274584
1.0.0-beta05 版本
2019 年 2 月 6 日
此版本包含一些错误修复。
错误修复
- 修复了在 API 23 上使用
JobScheduler.getPendingJob(...)
的情况。b/123893059 - 修复了在运行 Android 5.1(API 等级 22)或更低版本的设备上出现的
NullPointerException
。b/123835104
1.0.0-beta04 版本
2019 年 2 月 4 日
此版本包含一些错误修复。
错误修复
- 改进了基于 AlarmManager 的实现的 PeriodicWork 的调度。
- 修复了在使用基于 AlarmManager 的实现时,WorkManager 未能正确跟踪约束的情况。b/123379508
- 修复了在使用基于 AlarmManager 的实现时,WorkManager 未能在进程死亡时重试工作的情况。b/123329850
- 修复了在使用基于 AlarmManager 的实现时,WorkManager 会泄漏 Wakelocks 的情况。
1.0.0-beta03 版本
2019 年 1 月 25 日
此版本包含一些错误修复。
错误修复
- 我们在
1.0.0-beta02
中引入了一个回归问题,导致工作在某些情况下无法正确执行。b/123211993 - 修复了一个工作未正确遵守回退计时的问题。b/122881597
- 修复了在运行 Android 5.1 (API 或更低版本) 的设备上出现的
ConcurrentModificationException
。这是1.0.0-beta02
中修复程序的延续。b/121345393 - 为清单中缺少此注释的某些组件添加了
exported=false
。 - 在包级文档中包含了关于 WorkManager 如何与操作系统交互的信息。
1.0.0-beta02 版本
2019 年 1 月 15 日
此版本包含一些错误修复。
错误修复
- 修复了一个极端情况,即周期性工作在运行 Android 6.0(API 级别 23)的设备上可能每个时间间隔运行一次以上。b/121998363
- 修复了在运行 Android 5.1(API 级别 22)或更低版本的设备上出现的
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 稳定。此版本包含一些错误修复。
错误修复
- 先前已取消的成功完成的父级工作的子级将不再运行。b/120811767
- 正确初始化了日志记录类(主要在测试期间显示)。
1.0.0-alpha13 版本
2018 年 12 月 12 日
此版本包含一个次要的 API 更改,这对一些 Kotlin 用户很有帮助。
API 更改
androidx.work.Result
已移至ListenableWorker
的内部类。这可以防止与 Kotlin 的顶级Result
类发生重构冲突。这是一个破坏性 API 更改。 b/120564418
破坏性 API 更改
androidx.work.Result
已移至ListenableWorker
的内部类。
1.0.0-alpha12 版本
2018 年 12 月 5 日
此版本包含一些破坏性 API 更改;请参阅下面的破坏性 API 更改部分。此版本可能会作为我们的第一个 Beta 版发布。alpha12
还包含大量的文档更新。
API 更改
- 一个新的构件
work-rxjava2
引入了RxWorker
。这是一个ListenableWorker
,它需要一个Single<Payload>
。 - 由于 Firebase JobDispatcher 即将来临的弃用,对其的支持已被删除。这意味着随着我们进入 Beta 版,
work-firebase
构件将不再更新。我们将来会考虑添加替代方案。 - 将
Payload
合并到Result
中。Result
现在是一个“密封类”,具有三个具体的实现,您可以通过Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
)和Result.retry()
获得。您的ListenableFuture
现在返回Result
而不是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
方法更容易理解。这是一个破坏性更改。
错误修复
- 棉花糖之前的实现现在在恢复已执行任务的进程死亡方面更加可靠。
- 通过
observeForever
观察到的LiveData
通过 WorkManager 进行跟踪。这是 Room 库修复程序的反向移植。b/74477406 Data.Builder.build()
现在如果序列化对象超过其最大大小,则会抛出异常。这以前只会发生在后台线程上,您无法正确处理它。- 进一步区分了停止与取消的工作;
getWorkInfoById()
将在ListenableWorker.onStopped()
期间返回具有CANCELLED
State
的WorkInfo
。 - 在
ListenableWorker
中将null
Result
视为失败。b/120362353 - 针对有时会抛出
IllegalArgumentException
的运行 API 24 的 Shield 平板电脑的推测性修复。b/119484416
破坏性 API 更改
- 由于 Firebase JobDispatcher 即将来临的弃用,对其的支持已被删除。这意味着随着我们进入 Beta 版,
work-firebase
构件将不再更新。我们将来会考虑添加替代方案。 - 将
Payload
合并到Result
中。Result
现在是一个“密封类”,具有三个具体的实现,您可以通过Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
)和Result.retry()
获得。您的ListenableFuture
现在返回Result
而不是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 日
此版本包含许多将在 beta
版中成为稳定 API 的更改。此版本中存在破坏性 API 更改;请参阅下面的破坏性 API 更改部分。
API 更改
work-runtime-ktx
引入了一个新的CoroutineWorker
。WorkStatus
已重命名为WorkInfo
。所有相应的getStatus
方法变体都已重命名为相应的getWorkInfo
变体。这是一个破坏性更改。ListenableWorker.onStopped()
不再接受表示WorkRequest
是否已取消的布尔值参数。WorkManager
不再区分这一点。这是一个破坏性更改。androidx.work.test
包已重命名为androidx.work.testing
包。这是一个破坏性更改。Constraints
上的 setter 不再是公共 API 的一部分。这是一个破坏性更改。WorkerParameters.getTriggeredContentUris()
和WorkerParameters.getTriggeredContentAuthorities()
以前返回数组。现在这些方法返回集合。这是一个破坏性更改。ListenableWorker.onStartWork()
已重命名为ListenableWorker.startWork()
。这是一个破坏性更改。WorkStatus
的构造函数不再是公共 API 的一部分。这是一个破坏性更改。Configuration.getMaxJobSchedulerID()
和Configuration.getMinJobSchedulerID()
分别重命名为Configuration.getMinJobSchedulerId()
和Configuration.getMaxJobSchedulerId()
。这是一个破坏性更改。- 向公共 API 添加了许多
@NonNull
注释,以提高 API 的人体工程学。 - 添加
WorkManager.enqueueUniqueWork()
API,以排队唯一的OneTimeWorkRequest
,而无需创建WorkContinuation
。 WorkManager
上所有变体的enqueue
和cancel
方法现在返回一个新的Operation
类型。这是一个破坏性更改。enqueue
的所有变体不再接受WorkRequest
的 varargs。这是一个破坏性更改。 使用集合代替。您可以使用Arrays.asList()
修改现有代码。我们这样做是为了减少 API 表面和方法数量。- 尝试在每个进程中多次
initialize
WorkManager
现在将导致IllegalStateException
。这是一个破坏性更改。
错误修复
work-runtime-ktx
构件中的WorkRequest.Builder
现在使用ListenableWorker
。修复了 b/117666259- 确保
PeriodicWork
的下一次运行时间在未来。修复了 b/118204399 - 在应用启动时使用 WorkManager 时删除潜在的磁盘 I/O。修复了 b/117796731
- 修复了
WorkConstraintsTracker
中的竞争条件。修复了 android-workmanager/issues/56
破坏性 API 更改
WorkStatus
已重命名为WorkInfo
。所有对应的getStatus
方法变体均已重命名为对应的getWorkInfo
变体。ListenableWorker.onStopped()
不再接受表示WorkRequest
是否被取消的布尔型参数。WorkManager
不再区分这一点。androidx.work.test
包已重命名为androidx.work.testing
包。Constraints
的设置器不再是公共 API 的一部分。WorkerParameters.getTriggeredContentUris()
和WorkerParameters.getTriggeredContentAuthorities()
以前返回数组。现在这些方法返回集合。ListenableWorker.onStartWork()
已重命名为ListenableWorker.startWork()
。WorkStatus
的构造函数不再是公共 API 的一部分。Configuration.getMaxJobSchedulerID()
和Configuration.getMinJobSchedulerID()
分别重命名为Configuration.getMinJobSchedulerId()
和Configuration.getMaxJobSchedulerId()
。WorkManager
上所有enqueue
和cancel
方法的变体现在返回新的Operation
类型。- 所有
enqueue
变体不再接受WorkRequest
的可变参数。 - 尝试对每个进程多次初始化
WorkManager
现在将导致IllegalStateException
。
版本 1.0.0-alpha10
2018年10月11日
此版本支持开发者控制的异步工作。此版本中存在重大 API 变更;请参见下面的“重大 API 变更”部分。
我们预计 WorkManager 即将进入其 alpha 阶段的最后阶段。我们期望在 beta 版中实现 API 稳定,因此请花一些时间在我们的问题跟踪器上提交您的反馈。
API 更改
- 删除所有以前已弃用的方法和类,特别是默认的
Worker
构造函数。这是一个重大的 API 变更。 - 将
NonBlockingWorker
重命名为ListenableWorker
,它现在是一个未隐藏的公共类,可以随时使用。ListenableWorker
提供对一个抽象方法ListenableFuture
的访问,该方法在主线程上调用。由您负责异步启动和处理工作。完成后,应适当地更新onStartWork() ListenableFuture
。ListenableFuture
的参考实现位于alpha02
中的Futures
包中(请参见下面的WorkManager
部分)。Worker
扩展ListenableWorker
,并且仍然像以前一样运行,具有一个抽象的Result doWork()
方法。- 将一些方法和成员从
Worker
移至ListenableWorker
。 - 我们很快将提供使用 Kotlin 协程(一旦发布稳定版本)和 RxJava2 的
ListenableWorker
的参考实现。
WorkerFactory
接口和具体实现DefaultWorkerFactory
已合并到名为WorkerFactory
的抽象类中。该实现确保将基于反射的默认行为作为任何用户创建的WorkerFactory
实例的最后手段调用。这是一个重大的更改。- 删除了
WorkManager.synchronous()
和WorkContinuation.synchronous()
及所有相关方法。添加ListenableFuture
作为 API 中许多方法的返回类型。这是一个重大的 API 变更。- 您现在可以使用
ListenableFuture
同步获取和观察。例如,WorkManager.enqueue()
以前返回void
;现在它返回ListenableFuture
。您可以调用ListenableFuture.addListener(Runnable, Executor)
或ListenableFuture.get()
来在操作完成后运行代码。 - 请注意,这些
ListenableFuture
不会告诉您操作成功还是失败;只告诉您它们已完成。您仍然需要链接 WorkManager 方法才能找出此信息。 - 我们忽略了对这些对象的
cancel()
调用,因为它们令人困惑且难以理解(您是在取消操作还是取消结果工作?)。这是Future
合约中的内容。 - 为了与同步的
getStatus*
方法保持一致,我们提供了ListenableFuture
变体,并将返回LiveData
的现有变体重命名为明确包含“LiveData”作为名称的一部分(例如,getStatusesByIdLiveData(UUID)
)。这是一个重大的 API 变更。
- 您现在可以使用
错误修复
- 修复了 alpha09 中关于重复
androidx-annotations.pro
文件的已知问题。您可以通过从您的 gradle 文件中删除exclude 'META-INF/proguard/androidx-annotations.pro'
来删除先前发行说明中的解决方法。 - 添加了 proguard 配置以保留新的
Worker
构造函数。b/116296569 - 修复了在工作被
REPLACE
的竞争条件中可能发生的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日
已知问题
如果您遇到以下问题:“找到多个具有与操作系统无关的路径 'META-INF/proguard/androidx-annotations.pro' 的文件”,请将以下内容添加到您的 gradle 文件中,作为我们修复 alpha10 中问题的临时解决方法
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
错误修复
- 添加了另一个针对“100 个作业”错误所需的修复。b/115560696
- 添加了一些针对由于竞争条件导致的外键约束错误的修复。b/114705286
- 将
ConstraintTrackingWorker.onStopped(boolean)
调用委托给底层的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 依赖项)。我们将在即将发布的版本中将 ListenableFutures 引入 API。此更改将支持最终取消隐藏NonBlockingWorker
。 - 添加了通过
TestDriver.setInitialDelayMet(UUID)
和TestDriver.setPeriodDelayMet(UUID)
在TestDriver
中触发定时工作的能力。b/113360060
重大更改
- 默认的
Worker
和NonBlockingWorker
构造函数已弃用。请尽快迁移到新的构造函数。未来版本将删除默认构造函数。
版本 1.0.0-alpha08
2018年8月27日
错误修复
- 明确将 WorkManager 组件标记为直接启动不可感知,因此它们不会在直接启动期间启动。将来,我们将提供一个直接启动感知的 WorkManager 版本。b/112665532
- 修复了重试工作未运行的问题。b/112604021
- 修复了周期性工作未重复执行的问题(与上述问题相关)。b/112859683
- 在应用进程已运行时遵守回退策略。
- 更正了
Data
中的异常消息,以指示限制为 10KB。 - 将
Configuration.setMaxSchedulerLimit(int)
的最大值降低到 50,以解决JobScheduler
处理完成过程中的一些延迟。b/112817355
版本 1.0.0-alpha07
2018年8月16日
错误修复
- 修复了可能使用负限制返回无限数量结果的潜在 SQL 查询。
- 已完成执行的工作现在可以正确取消其他调度程序中该工作的全部待处理副本。这导致超过了
JobScheduler
作业限制。b/111569265 - 修复了
ConstraintTracker
中的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
以与现有 API 保持一致。)
版本 1.0.0-alpha06
2018年8月1日
错误修复
- 在调度工作时防止数据库锁定。b/111801342
- 修复了在休眠模式下导致
PeriodicWork
未按计划运行的错误。b/111469837 - 修复了跟踪约束时的竞争条件,该条件会导致
WorkManager
崩溃。googlecodelabs/android-workmanager/issues/56 - 使用
WorkRequest.Builder#build()
时,请创建唯一的WorkRequest
。b/111408337 - 只有当存在需要
RescheduleReceiver
的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更改。**
错误修复
- 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日
错误修复
- 使用基于
AlarmManager
的实现时,现在可以正确地重新调度PeriodicWorkRequest
。 - 修复了在强制停止或重新启动后重新调度所有工作程序时可能出现的ANR问题。b/110507716
- 向各种WorkManager API添加了可空性注解。b/110344065
- 记录在Worker执行期间发生的未捕获异常。b/109900862
- 允许破坏性数据库迁移,以防您决定回滚到旧版本的WorkManager。b/74633270
- 修复了如果创建重复的隐式标签则发生的迁移崩溃问题。这是一个非常罕见的问题,只有当您自己使用相同的隐式标签格式时才会发生。
版本 1.0.0-alpha03
2018年6月19日
错误修复
修复了基于
AlarmManager
的实现中的竞争条件。b/80346526。修复了设备重启后使用
JobScheduler
时出现重复作业的问题。具有内容URI触发器的作业现在可以在重新启动后持久化。b/80234744
修复了重新排队
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)
,这有助于定义JobScheduler
作业ID的范围,以确保WorkManager
可以使用。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日
错误修复
- 修复了
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
。