在 Android 12 中使用 WorkManager

2021 年 10 月 22 日 谷歌开发者
Android 12 (API 级别为 31) 引入了 前台服务启动限制 。除 少部分 特殊场景 外,如果您的应用的 targetSdkVersion 是 Android 12 或者更高 API 级别的话,应用在后台运行时将不能再启动前台服务。这意味着,如果应用当前状态不符合后台启动服务的条件,调用 setForeground 时可能会抛出 异常


  • 前台服务启动限制

    https://developer.android.google.cn/about/versions/12/foreground-services

  • 特殊场景

    https://developer.android.google.cn/guide/components/foreground-services#background-start-restriction-exemptions

  • setForeground

    https://developer.android.google.cn/reference/androidx/work/ListenableWorker#setForegroundAsync(androidx.work.ForegroundInfo)

  • 异常

    https://developer.android.google.cn/reference/android/app/ForegroundServiceStartNotAllowedException


因此,我们在 WorkManager 2.7 中做出了部分改进,使得应用在遵守后台限制的同时可以轻松地安排重要任务。通过加急任务,应用可以轻松地运行耗时短且高优先级的任务,例如发送一条聊天信息或者往社交网络上传一张图片。推荐使用加急任务来启动需要立即执行且即使用户将应用放至后台也能继续执行的任务。


  • 加急任务
    https://developer.android.google.cn/about/versions/12/foreground-services#expedited-jobs


如需设置加急任务,可通过 WorkRequest 的 Builder 对象调用 setExpedited() 方法:
val request = OneTimeWorkRequestBuilder<HighPriorityWorker>()    .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)      .build()WorkManager.getInstance(context).enqueue(request)

通过调用 setExpedited() 告诉框架该任务是重要的并且比其他任务具有更高的优先级。请注意,我们在调用 setExpedited() 方法时传入了 OutOfQuotaPolicy 参数。加急任务受基于应用待机群组 (App Standby Buckets) 的配额限制,当您的应用尝试在超出配额的情况下执行加急任务时,WorkManager 会根据 OutOfQuotaPolicy 参数做出相应的行为: 完全放弃加急任务请求 (DROP_WORK_REQUEST),或者将该加急任务降级至普通任务 (RUN_AS_NON_EXPEDITED_WORK_REQUEST)。加急任务很重要,但并不意味着它可以一直执行,您需要将配额视为执行加急任务的时间限制。


  • OutOfQuotaPolicy
    https://developer.android.google.cn/reference/androidx/work/OutOfQuotaPolicy

  • 应用待机群组 (App Standby Buckets)
    https://developer.android.google.cn/topic/performance/appstandby


WorkManager 2.7 是向后兼容的,可以在 Android 12 之前的系统上运行。当在 Android 11 或之前版本的系统上调用 setExpedited() 时,WorkManager 将默认使用前台服务代替加急任务。

想了解 WorkManager 中 setExpedited() API 的实战,请参阅官方文档:

  • WorkManager 示例
    https://github.com/android/architecture-components-samples/tree/android-s/WorkManagerSample

  • 加急任务
    https://developer.android.google.cn/topic/libraries/architecture/workmanager/how-to/define-work#expedited-jobs


您可以在官方发布说明中查看 WorkManager 每个版本中变更及优化的详细列表,以及 WorkManager 2.6 WorkManager 2.7 的发布说明。

  • WorkManager 2.6

    https://developer.android.google.cn/jetpack/androidx/releases/work#2.6.0

  • WorkManager 2.7

    https://developer.android.google.cn/jetpack/androidx/releases/work#2.7.0


如果您有与 WorkManager 相关的任何功能需求或问题,欢迎在我们公开的问题追踪器里 提交 issue :
https://issuetracker.google.com/issues/new?component=409906

欢迎您通过下方二维码向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!



推荐阅读

如页面未加载,请刷新重试



 点击屏末  | 即刻查看行为变更: 以 Android 12 为目标平台的应用




登录查看更多
0

相关内容

Android(安卓)是一种以 Linux 为基础开发的开放源代码的操作系统,主要应用于便携设备。2005 年,Android 公司被 Google 收购,随后 Google 联合制造商组成开放手机联盟。Android 已从智能手机领域逐渐扩展到平板电脑、智能电视(及机顶盒)、游戏机、物联网、智能手表、车载系统、VR以及PC等领域。
【Google-BryanLim等】可解释深度学习时序预测
专知会员服务
61+阅读 · 2021年12月19日
专知会员服务
15+阅读 · 2021年9月15日
专知会员服务
21+阅读 · 2021年7月28日
专知会员服务
8+阅读 · 2021年6月20日
【CVPR2021】现实世界域泛化的自适应方法
专知会员服务
55+阅读 · 2021年3月31日
专知会员服务
43+阅读 · 2020年11月27日
【Google】平滑对抗训练,Smooth Adversarial Training
专知会员服务
48+阅读 · 2020年7月4日
欢迎体验 | Android 13 开发者预览版 2
谷歌开发者
1+阅读 · 2022年3月18日
iOS、Android、PC 近期值得下载的 11 个 App
少数派
1+阅读 · 2022年3月3日
Android 13 首个开发者预览版到来
谷歌开发者
0+阅读 · 2022年2月12日
iOS、Android、PC 近期值得下载的 6 个 App
少数派
1+阅读 · 2022年2月8日
新版本系统适配: Android 12 中的兼容性变更
谷歌开发者
0+阅读 · 2022年1月13日
Android 12 正式发布 | 开发者们的全新舞台
谷歌开发者
0+阅读 · 2021年10月11日
正式版即将到来 | Android 12 Beta 5 现已发布
谷歌开发者
0+阅读 · 2021年9月9日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Arxiv
12+阅读 · 2020年12月10日
VIP会员
相关资讯
欢迎体验 | Android 13 开发者预览版 2
谷歌开发者
1+阅读 · 2022年3月18日
iOS、Android、PC 近期值得下载的 11 个 App
少数派
1+阅读 · 2022年3月3日
Android 13 首个开发者预览版到来
谷歌开发者
0+阅读 · 2022年2月12日
iOS、Android、PC 近期值得下载的 6 个 App
少数派
1+阅读 · 2022年2月8日
新版本系统适配: Android 12 中的兼容性变更
谷歌开发者
0+阅读 · 2022年1月13日
Android 12 正式发布 | 开发者们的全新舞台
谷歌开发者
0+阅读 · 2021年10月11日
正式版即将到来 | Android 12 Beta 5 现已发布
谷歌开发者
0+阅读 · 2021年9月9日
相关基金
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Top
微信扫码咨询专知VIP会员