WorkManager
最新更新 | 稳定版 | 候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 9 月 4 日 | 2.9.1 | - | - | 2.10.0-alpha03 |
声明依赖项
要添加对 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-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)
错误修复
- 修复了
WorkManager
在工作的**前台类型**被撤销了 Android 14 的先决条件权限时,尝试重新启动长时间运行的工作者(即前台工作者)导致崩溃的问题。(b/333957914) - 删除了手动概述对新平台 API 的访问,因为在使用 R8 和 AGP 7.3 或更高版本(例如 R8 版本 3.3)时,以及在使用 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) - 为工作者添加自定义异常处理程序(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
指定为工作者的约束条件。这使得能够更细粒度地控制此工作者应在哪个网络上运行。
API 更改
- 添加了将
NetworkRequest
指定为约束条件的功能。(Id98a1,b/280634452)
版本 2.9
版本 2.9.1
2024 年 8 月 7 日
androidx.work:work-*:2.9.1
已发布。版本 2.9.1 包含这些提交。
错误修复
- 修复了
WorkManager
在工作的**前台类型**被撤销了Android 14 的先决条件权限时,尝试重新启动长时间运行的工作者(即前台工作者)导致崩溃的问题。(b/333957914)
版本 2.9.0
2023 年 11 月 29 日
androidx.work:work-*:2.9.0
已发布。版本 2.9.0 包含这些提交。
自 2.8.0 以来重要的更改
- 通过
Flow
进行可观察性。现在,工作者的进度可以通过WorkManager.getWorkInfosFlow
和类似方法通过 Flow 而不是LiveData
进行观察。 - 现在,
WorkManager
提供了有关先前停止工作者的原因的提示。可以通过工作者本身的getStopReason()
方法或通过WorkInfo
的getStopReason()
方法进行查询。 - 通过
setNextScheduleTimeOverride
精确调度周期性工作者。这允许动态计算下一个周期性工作的计划时间,可用于实现高级功能,例如自适应刷新时间、自定义重试行为或在用户每天早上醒来之前运行新闻提要工作者,而不会出现漂移。这些技术应与ExistingPeriodicWorkPolicy.UPDATE
一起使用,以避免在调度下一个工作者时取消当前正在运行的工作者。 - 使用与生产环境匹配的线程进行 WorkManager 测试。可以在
initializeTestWorkManager
中使用ExecutorsMode.PRESERVE_EXECUTORS
来保留在Configuration
中设置的执行器并使用真正的主线程。 - 诸如
CoroutineWorker
之类的协程 API 已从附加工件 work-runtime-ktx 移动到主工件 work-runtime。work-runtime-ktx 现在为空。
API 更改
- 将
stopReason
添加到WorkInfo
中。它使工作者运行后stopReason
可用。这可能有助于以可用的方式报告stopReason
,因为一旦工作者停止,应用程序本身可能会很快被杀死。(I21386) - 允许通过配置设置
Clock
并用于驱动工作者测试的执行排序。(Ic586e) - 添加了
getStopReason()
方法到ListenableWorker
,该方法提供了工作者停止的原因提示。(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 观察工作者的功能(If122a) - 向
Constraints
的构造函数和属性添加了缺少的@RequiresApi(...)
注释。它们现在与Constraints.Builder
中设置程序上的相应注释保持一致,这些注释从早期版本的WorkManager
中存在。(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 包含这些提交。
- 自上次测试版发布以来没有更改
版本 2.9.0-beta01
2023 年 9 月 6 日
androidx.work:work-*:2.9.0-beta01
已发布。版本 2.9.0-beta01 包含这些提交。
API 更改
- 添加了
WorkInfo.stopReason
和ListenableWorker.stopReason
返回的停止原因常量(I0cc00)
版本 2.9.0-alpha02
2023 年 7 月 26 日
androidx.work:work-*:2.9.0-alpha02
已发布。版本 2.9.0-alpha02 包含这些提交。
新功能
- 现在,
WorkManager
提供了有关先前停止工作者的原因的提示。可以通过工作者本身的getStopReason()
方法或通过WorkInfo
的getStopReason()
方法进行查询。
API 更改
- 将
stopReason
添加到WorkInfo
中。它使工作者运行后stopReason
可用。这可能有助于以可用的方式报告stopReason
,因为一旦工作者停止,应用程序本身可能会很快被杀死。(I21386) - 允许通过配置设置
Clock
并用于驱动工作者测试的执行排序。(Ic586e) - 添加了
getStopReason()
方法到ListenableWorker
,该方法提供了工作者停止的原因提示。(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
进行可观察性。现在,工作者的进度可以通过WorkManager.getWorkInfosFlow
和类似方法通过 Flow 而不是LiveData
进行观察。 - 通过
setNextScheduleTimeOverride
精确调度周期性工作者。这允许动态计算下一个周期性工作的计划时间,可用于实现高级功能,例如自适应刷新时间、自定义重试行为或在用户每天早上醒来之前运行新闻提要工作者,而不会出现漂移。这些技术应与ExistingPeriodicWorkPolicy.UPDATE
一起使用,以避免在调度下一个工作者时取消当前正在运行的工作者。 - 在测试时,
WorkManager
的线程处理方式与生产环境一致。可以使用ExecutorsMode.PRESERVE_EXECUTORS
来保留在Configuration
中设置的执行器,并使用真实的 UI 线程。 - 协程 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) - 添加了通过
getWorkInfosByTagFlow
、getWorkInfoByIdFlow
、getWorkInfosForUniqueWorkFlow
、getWorkInfosFlow
方法通过 Flow 观察工作者的功能(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 包含以下提交。
错误修复
- 修复了
RescheduleReceiver
中的 ANR 问题,该问题以前没有正确处理两个同时广播。(b/236906724)
版本 2.8.0
2023 年 2 月 8 日
发布了 androidx.work:work-*:2.8.0
。版本 2.8.0 包含以下提交。
自 2.7.0 以来重要的更改
新功能
- 添加了一种以非侵入方式更新
WorkRequests
的功能,保留原始入队时间、链式调用等。有关此功能的详细信息,请参阅详细博文,以及WorkManager.updateWork
和ExistingPeriodicWorkPolicy.UPDATE
的 javadoc 以获取更多详细信息。
API 更改
- 添加了
WorkManager.updateWork
以更新工作并保留其原始入队时间和链式调用。(I9a248,b/219446409) - 添加了
ExistingPeriodicWorkPolicy.UPDATE
。此策略允许通过名称更新周期性工作。它类似于现有的REPLACE
,但侵入性较小:如果工作器当前正在运行,它不会取消工作器,并且它保留入队时间 - 初始延迟和周期是从原始入队时间计算的,而不是从更新时间计算的。REPLACE
已弃用,以减少非常相似命名的REPLACE
和UPDATE
之间的混淆。如果您仍然希望保留REPLACE
的先前语义,可以使用新添加的CANCEL_AND_REENQUEUE
,它与REPLACE
相同。(I985ed,b/219446409) - 添加了通过 setSchedulingExceptionHandler 提供
Consumer<Throwable>
来拦截调度异常的功能。 - 添加了通过 setInitializationExceptionHandler 提供
Consumer<Throwable>
来确定在尝试初始化 WorkManager 时是否存在问题的功能。 - 将
OneTimeWorkRequest
和PeriodicWorkRequest
的内联帮助程序从androidx.work:work-runtime-ktx
移动到androidx.work:work-runtime
。(I0010f,b/209145335) - 添加了帮助程序方法
WorkQuery.fromIds
、WorkQuery.fromStates
、WorkQuery.fromUniqueWorkNames
和WorkQuery.fromTags
以直接创建WorkQuery
。(b/199919736)(If48f2,b/199919736) - 向
Worker
添加了getForegroundInfo
。(Ic1ead) - 现在,RxJava 2 和 RxJava 3 的
RxWorker
都具有setForeground
,它返回Completable
,可用于代替返回ListenableFuture
的setForegroundInfoAsync
。 - RxJava 2 和 RxJava 3 的
RxWorker
都具有getForegroundInfo
,它返回Single
,可用于代替返回ListenableFuture
的getForegroundInfoAsync
。(b/203851459) - 现在可以直接构造约束,而不是使用
Constraints.Builder
,这对于 Kotlin 用户来说很方便。(Idc390,b/137568653) - 添加了检查
WorkManager
是否已初始化的功能。此外,还为库开发人员添加了一个新的getConfiguration()
API,以获取初始化WorkManager
时使用的配置。(I6eff3,b/212300336)
错误修复
- 修复了贪婪调度程序的一个问题,该问题会阻止工作器在负载过重时立即运行。(I9686b,b/248111307)
- 在 API 中添加了
@RequiresPermission
,这些 API 要求在 SDK 33 及更高版本上授予POST_NOTIFICATIONS
权限。(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 包含以下提交。
错误修复
- 修复了贪婪调度程序的一个问题,该问题会阻止工作器在负载过重时立即运行。(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
或使用ExistingPeriodicWorkPolicy.UPDATE
的WorkManager.enqueueUniquePeriodicWork
更新,则工作器具有多个生成。请注意,如果在工作器执行期间发生更新,则如果工作器当前正在运行,则此方法可能会返回比当前正在运行的工作器更新的生成。(I665c5,b/219446409)(I128a9,b/219446409) - 添加了
InitializationExceptionHandler
,这是一种异常处理程序,可用于确定在尝试初始化WorkManager
时是否存在问题。(I061de)
版本 2.8.0-alpha03
2022 年 8 月 10 日
发布了 androidx.work:work-*:2.8.0-alpha03
。版本 2.8.0-alpha03 包含以下提交。
新功能
- 添加了一种以非侵入方式更新
WorkRequests
的功能,保留原始入队时间、链式调用等。有关详细信息,请参阅WorkManager.updateWork
和ExistingPeriodicWorkPolicy.UPDATE
。
API 更改
- 添加了
WorkManager.updateWork
以更新工作并保留其原始入队时间和链式调用。(I9a248,b/219446409) - 添加了
ExistingPeriodicWorkPolicy.UPDATE
。此策略允许通过名称更新周期性工作。它类似于现有的REPLACE
,但侵入性较小:如果工作器当前正在运行,它不会取消工作器,并且它保留入队时间 - 初始延迟和周期是从原始入队时间计算的,而不是从更新时间计算的。REPLACE
已弃用,以减少非常相似命名的REPLACE
和UPDATE
之间的混淆。如果您仍然希望保留REPLACE
的先前语义,可以使用新添加的CANCEL_AND_REENQUEUE
,它与REPLACE
相同。(I985ed,b/219446409) - 通过定义一个
SchedulingExceptionHandler
,可以拦截调度异常。 (I033eb) - 将
OneTimeWorkRequest
和PeriodicWorkRequest
的内联帮助程序从androidx.work:work-runtime-ktx
移动到androidx.work:work-runtime
。(I0010f,b/209145335)
错误修复
- 在 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 开始委托给加急作业,而在 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
:添加了对可以在任何进程中运行的工作程序的支持。 (Iaf200)来自WorkManager
2.6.0-alpha02
:添加了一个RemoteCoroutineWorker
,它是RemoteListenableWorker
的实现,可以绑定到远程进程。 (I30578)
API 更改
- 来自WorkManager
2.6.0-alpha02
:添加了对TEMPORARILY_UNMETERED
网络约束的支持。 (I08d5e) - 来自WorkManager
2.6.0-alpha02
:多进程工作程序对setProgressAsync()
的支持。 (Ib6d08) - 来自WorkManager
2.6.0-alpha02
:使WorkManagerInitializer
公开,以便其他androidx.startup.Initializer
可以将其用作依赖项。 (I5ab11)
版本 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
标记为加急。此 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/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) - 多进程 Worker 对
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)
错误修复
- 添加了一个针对 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
现在确保在Application
初始化时通过协调作业为每个WorkRequest
提供备份作业。这大大提高了作业执行的可靠性。(b/172475041,aosp/1489577) WorkManager
通过减少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 包含以下提交。
新功能
- 向 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 的主应用进程,并返回一个流畅的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
的大小)。这意味着当应用处于前台时,应用现在可以执行更多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 小时内完成的 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)修复了一个错误,即
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) - 修复了一个错误,即
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 包含以下提交。
错误修复
- 修复了一个错误,该错误会导致在超过 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 包含以下提交。
错误修复
- 修复了一个错误,如果
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 包含以下提交。
错误修复
- 更好地管理长时间运行的
Worker
(在活动的前台Service
中运行)的Notification
的生命周期。(aosp/1218539,b/147249312) WorkManager
现在依赖于稳定的androidx.sqlite:sqlite-framework:2.1.0
。(aosp/1217729)- 添加了 lint 规则,以确保在
ForegroundInfo
中使用foregroundServiceType
时,在AndroidManifest.xml
中指定了foregroundServiceType
。(aosp/1214207,b/147873061)
版本 2.3.0
版本 2.3.0
2020 年 1 月 22 日
androidx.work:work-*:2.3.0
发布,自 2.3.0-rc01
以来没有更改。版本 2.3.0 包含以下提交。
自 2.2.0 以来重要的更改
- 通过
ListenableWorker#setForegroundAsync()
支持长时间运行或重要工作。 - 通过
ListenableWorker#setProgressAsync()
支持 Worker 进度。 - 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 更改
ForegroundInfo
现在要求您在使用ListenableWorker.setForegroundAsync()
时指定要使用的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,工作者可以通过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)
错误修复
- 进程内调度程序现在会忽略具有
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
。 此版本中包含的提交可以 在此处 找到。
错误修复
- 修复了一个错误,该错误会导致应用程序在备份正在进行时使用
JobScheduler
执行作业时崩溃 b/135858602。
版本 2.1.0-beta02
2019年6月20日
已发布 androidx.work:work-*:2.1.0-beta02
。 此版本中包含的提交可以 在此处 找到。
错误修复
TestListenableWorkerBuilder
现在在创建ListenableWorker
实例时使用正确的WorkerFactory
。b/135275844- 修复了一个错误,该错误导致由于进程死亡而导致
WorkRequest
的执行窗口出现漂移。b/135272196
版本 2.1.0-beta01
2019年6月13日
已发布 androidx.work:work-*:2.1.0-beta01
。 此版本中包含的提交可以 在此处 找到。
错误修复
- 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 版本相同,并且是 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 版本。
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 会泄漏 Wakelock 的情况。
版本 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
中其余的可变参数方法,以简化 API。要解决任何构建问题,您可以使用Arrays.asList(...)
包装您现有的可变参数。我们仍然包含每个方法的单参数版本。这是一个破坏性更改。 - 删除了
WorkContinuation.combine(OneTimeWorkRequest, *)
变体。它们呈现了一个令人困惑的 API;现有的combine
方法更易于理解。这是一个破坏性更改。
错误修复
- Marshmallow 之前的实现现在在恢复已执行任务的进程死亡方面更可靠。
- 通过
observeForever
观察的LiveData
由 WorkManager 进行跟踪。这是 Room 库修复程序的回退版本。 b/74477406 - 如果序列化对象超过最大大小,
Data.Builder.build()
现在将抛出异常。以前,这只会发生在后台线程中,您无法正确处理它。 - 进一步区分了已停止和已取消的工作;在
ListenableWorker.onStopped()
期间,getWorkInfoById()
将返回一个具有CANCELLED
State
的WorkInfo
。 - 在
ListenableWorker
中将null
Result
视为失败。 b/120362353 - 针对运行 API 24 的 Shield 平板电脑有时会抛出
IllegalArgumentException
的问题进行了推测性修复。 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。要修复任何构建问题,您可以将现有的 varargs 包裹在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()
以前返回数组。现在这些方法返回集合。这是一个重大更改。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
上的 setter 不再是公共 API 的一部分。WorkerParameters.getTriggeredContentUris()
和WorkerParameters.getTriggeredContentAuthorities()
以前返回数组。现在这些方法返回集合。ListenableWorker.onStartWork()
已重命名为ListenableWorker.startWork()
。WorkStatus
的构造函数不再是公共 API 的一部分。Configuration.getMaxJobSchedulerID()
和Configuration.getMinJobSchedulerID()
分别重命名为Configuration.getMinJobSchedulerId()
和Configuration.getMaxJobSchedulerId()
。WorkManager
上所有变体的enqueue
和cancel
方法现在返回新的Operation
类型。enqueue
的所有变体不再接受WorkRequest
的 varargs。- 每个进程尝试多次
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()
以及所有相关方法。将ListenableFuture<Void>
作为 API 中许多方法的返回类型。这是一个重大 API 更改。- 您现在可以使用
ListenableFuture
同步获取和观察。例如,WorkManager.enqueue()
以前返回void
;现在它返回ListenableFuture<Void>
。您可以调用ListenableFuture.addListener(Runnable, Executor)
或ListenableFuture.get()
以在操作完成后运行代码。 - 请注意,这些
ListenableFuture
不会告诉您操作是否成功或失败;只会告诉您它们已完成。您仍然需要链接 WorkManager 方法以找出此信息。 - 我们忽略了这些对象上的
cancel()
调用,因为它们令人困惑且难以推理(您是在取消操作还是取消结果工作?)。这在Future
合同中。 - 为了与同步
getStatus*
方法保持一致,我们提供了ListenableFuture
变体,并将返回LiveData
的现有变体重命名为明确地将“LiveData”作为名称的一部分(例如,getStatusesByIdLiveData(UUID)
)。这是一个重大 API 更改。
- 您现在可以使用
错误修复
- 修复了 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日
已知问题
如果您遇到以下问题:“More than one file was found with OS independent path '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 更改
- 您现在可以通过在
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日
错误修复
- 明确将 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<String, Any?>)
以与现有 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 - 仅在有需要它的
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
文档更新。 b/109827628,b/109758949,b/80230748
修复了重新排队
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日
错误修复
- 修复了
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
。