0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Android 12中运行WorkManager

谷歌开发者 来源:Android开发者 作者:Android 2021-10-28 11:18 次阅读

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

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3937

    浏览量

    127512
  • 服务器
    +关注

    关注

    12

    文章

    9218

    浏览量

    85578

原文标题:在 Android 12 中使用 WorkManager

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何在Windows中使用MTP协议

    、图片等)的通信协议,它被广泛用于Android设备。以下是如何在Windows中使用MTP协议的详细步骤: 1. 确保设备支持MTP 首先,你需要确认你的设备支持MTP协议。大多数现代Android
    的头像 发表于 01-03 10:26 80次阅读

    android手机上emulate应用程序的方法

    Android手机上模拟(emulate)应用程序的方法通常涉及到使用Android模拟器(Emulator)或类似的工具来模拟Android环境,以便在没有实际物理设备的情况下运行
    的头像 发表于 12-05 15:33 324次阅读

    迅为RK3588开发板Android12动态替换开机logo

    迅为RK3588开发板Android12动态替换开机logo
    的头像 发表于 11-15 15:04 512次阅读
    迅为RK3588开发板<b class='flag-5'>Android12</b>动态替换开机logo

    何在Android上构建自定义AI功能

    在 "AI on Android Spotlight Week" 期间,我们深入探讨了如何将自己的 AI 模型引入 Android 设备,如手机、平板电脑等。通过利用
    的头像 发表于 11-15 11:51 420次阅读

    何在反激式转换器缓冲FET关断电压

    上一期,我们介绍了如何在正向转换器导通时缓冲输出整流器的电压。现在,我们看一下如何在反激式转换器缓冲 FET 关断电压。
    的头像 发表于 11-04 09:48 318次阅读
    如<b class='flag-5'>何在</b>反激式转换器<b class='flag-5'>中</b>缓冲FET关断电压

    【软件干货】Android应用进程如何保活?

    Android应用程序,为了保证应用的正常运行和稳定性,有时需要对应用进程进行保活。以下是一些实现进程保活的方法:
    的头像 发表于 10-15 17:05 467次阅读
    【软件干货】<b class='flag-5'>Android</b>应用进程如何保活?

    何在Altium Designer快速定位器件

    想知道如何在Altium Designer快速定位器件嘛?
    的头像 发表于 10-12 09:28 3496次阅读
    如<b class='flag-5'>何在</b>Altium Designer<b class='flag-5'>中</b>快速定位器件

    何在反激式拓扑实现软启动

    电子发烧友网站提供《如何在反激式拓扑实现软启动.pdf》资料免费下载
    发表于 09-04 11:09 0次下载
    如<b class='flag-5'>何在</b>反激式拓扑<b class='flag-5'>中</b>实现软启动

    何在FPGA实现随机数发生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7实现4位伪随机数发生器(PRNGs)。
    的头像 发表于 08-06 11:20 709次阅读
    如<b class='flag-5'>何在</b>FPGA<b class='flag-5'>中</b>实现随机数发生器

    请问cmakelists的变量如何在程序中使用?

    大家好, 我有个问题请教,cmakelists.txt的变量如何在程序中使用?比如以下cmakelists.txt文件的PROJECT_VER变量,我如何在c程序中使用?试了很多办
    发表于 06-11 07:34

    何在代码动态修改手指电容?

    何在代码动态修改手指电容
    发表于 05-22 07:11

    何在PSoC62 Evaluation kit开发板上运行RT-Thread呢?

    本文主要介绍如何在PSoC62 Evaluation kit开发板上运行RT-Thread,如何连接CYW43012 WiFi蓝牙模组,以及如何进行WiFi联网、网络延迟、网络带宽测试。
    的头像 发表于 02-27 10:49 1041次阅读
    如<b class='flag-5'>何在</b>PSoC62 Evaluation kit开发板上<b class='flag-5'>运行</b>RT-Thread呢?

    何在CYGWIN的IFX环境安装cysecuretool?

    嗨, 我正在尝试在 cygwin 安装 cysecure 工具但遇到了错误。 谁能指导如何在 CYGWIN 的 IFX 环境安装 cysecuretool?
    发表于 01-25 08:25

    求助,如何在运行过程监控变量实时的值?

    何在运行过程监控变量实时的值? 在我点击 " resume " 之前,可以看到这个值。 我点击 " resume " 后,看不到这个值。
    发表于 01-22 07:39

    何在运行时擦除/编程UCB?

    试着在相关的 UCB 上使用 DFLASH 算法,然后我用砖砌了我的单位。 是否有专门针对如何在运行时擦除/编程 UCB?
    发表于 01-22 07:18