文章目录

  • 前言
  • 一、了解加急作业
  • 二、加急工作
    • 加急工作特征:
    • 配额:
    • 执行加急工作:
    • 向后兼容性和前台服务:
  • 总结

前言

Android 12 (API 31) 引入了前台服务启动限制: 以 Android 12 为目标平台的应用在后台运行时无法再启动前台服务(除了一些特殊情况), 否则会抛出异常: ForegroundServiceStartNotAllowedException

为应对新版本的变动, WorkManager 2.7.0 引入了加急工作的概念。可以调用 setExpedited() 来声明 Worker 应使用加急作业。这一新 API 在 targetSdkVersion = 31 的应用中运行时使用 加急作业,而在早期 Android 版本中使用 前台服务 来提供向后兼容性。

注意:
加急作业 是属于 Android12 JobScheduler 中的新内容, 而 WorkManager的加急工作, 在Android12 使用 加急作业 来完成, 在低版本手机上 使用 前台服务 来完成.


一、了解加急作业

Android 12 在 JobScheduler 中引入的加急作业 允许应用执行简短的重要任务; 其特性为:

  • 它们适用于在几分钟内完成的简短任务。除非您的应用有足够的配额,否则系统可能会停止该作业。
  • 它们不太受系统的某些电源管理限制(包括省电模式和低电耗模式)的影响。
  • 只要系统的当前工作负载允许,系统就会立即运行这些作业。

加急作业可能会延迟

系统会尝试在调用指定的加急作业后,尽快执行该作业。不过,与其他类型的作业一样,系统可能会延迟启动新的加急作业,如在以下情况下:

  • 系统负载过高,当有过多作业已在运行或者当系统内存不足时,就会发生这种情况。
  • 已超出加急作业配额限制。加急作业使用基于应用待机存储分区的配额系统,并限制滚动时间窗口中的最大执行时间。用于加急作业的配额比用于其他类型的后台作业的配额限制更大。

二、加急工作

加急工作特征:

  • 重要性: 加急工作适用于对用户很重要或由用户启动的任务。
  • 速度: 加急工作最适合那些立即启动并在几分钟内完成的简短任务。
  • 配额: 限制前台执行时间的系统级配额决定了加急作业是否可以启动。
  • 电源管理: 电源管理限制(如省电模式和低电耗模式)不太可能影响加急工作。
  • 延迟时间: 系统立即执行加急工作,前提是系统的当前工作负载允许执行此操作。这意味着这些工作对延迟时间较为敏感,不能安排到以后执行。

在用户想要发送消息或附加的图片时,可能会在聊天应用内使用加急工作。同样,处理付款/订阅流程的应用也可能需要使用加急工作。这是因为这些任务对用户很重要,会在后台快速执行,并需要立即开始执行。

配额:

系统必须先为加急作业分配应用执行时间,然后才能运行作业。执行时间并非无限制,而是受配额限制。 如果您的应用使用其执行时间并达到分配的配额,在配额刷新之前,您无法再执行加急工作。这样,Android 可以更有效地在应用之间平衡资源。

每个应用均有自己的前台执行时间配额。可用的执行时间取决于待机模式存储分区和进程的重要性。

注意: 当您的应用在前台运行时,配额不会限制加急工作的执行。仅在应用在后台运行时或当应用移至后台时,执行时间配额才适用。因此,您应在后台加快要继续的工作。当应用在前台运行时,您可以继续使用“setForeground()”。

执行加急工作:

val myWorkRequest = OneTimeWorkRequestBuilder<MyWorker>().setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST).build()
WorkManager.getInstance(this).enqueue(myWorkRequest)

配额政策:

当配额不足时, 加急工作该如何运行:

  • OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST - 会导致作业作为普通工作请求运行。
  • OutOfQuotaPolicy.DROP_WORK_REQUEST - 会在配额不足时导致请求取消。

延迟加急工作:

我们上面说到 加急作业 可能会延迟. 同样,新的 加急工作 也有可能在 系统负载过高 或配合不足时延迟启动

向后兼容性和前台服务:

Android 8.0 引入了应用 后台执行限制
因此 WorkManager 在版本 2.3.0 添加了一些 API, 用于处理需立即执行的长时间运行任务, 其中包括 setForegroundAsync()setForeground() ; 它会在 前台服务 中立即执行。

据官方描述:

  • WorkManager 2.7 向后兼容,并在 12 之前的 Android 版本上运行。请注意,在这些情况下,它使用前台服务,而不是加速工作。
  • 以 Android 12 或更高版本为目标平台时,前台服务仍可通过 setForegroundAsync() 使用。不过,我们强烈建议您使用 setExpedited()。

意思是: ?

假如: targetSdkVersion < 31, 我 是否 只需调用 setForeground(), 而不需要调用 setExpedited()

假如: targetSdkVersion >= 31, 我 是否 只需调用 setExpedited(), 而无需调用 setForeground()


总结

没有总结

上一篇: WorkManager笔记: 二、管理工作
下一篇: 记一次自定义View: 扇形圆环

WorkManager笔记: 三、加急工作相关推荐

  1. WorkManager笔记: 二、管理工作

    文章目录 一.标记工作 二.输入输出数据 1.设置输入数据 2.设置输出数据 3.拿到输出结果 三.管理工作 1.唯一工作: 2.观察您的工作 3.取消和停止工作 四.观察工作器执行进度 五.Work ...

  2. 读书笔记(三)工作票数据挖掘

    前言:本文是[读书笔记|大数据时代的数据挖掘]系列的第三篇,是关乎第三章工作票数据挖掘的读书笔记. 目录 一.工作票简介 二.工作票产生机制和亟待解决的问题 三.研究现状 1.工作票分类 2.工作票推 ...

  3. MLX90640开发笔记(三)工作流程和操作MLX90640的一般步骤

    默认参数时,MLX90640的工作流程如下: (1)上电,内部初始化(约40ms) (2)读取工作参数到控制和状态寄存器 (3)开始以2Hz的速率测量实时数据并更新到RAM,自动更新状态寄存器. 测量 ...

  4. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  5. Docker笔记三 Docker镜像制作

    Docker笔记三 Docker镜像制作 1.Docker镜像制作方法: docker commit 保存当前container的状态到镜像,生成p_w_picpath. docker build 利 ...

  6. 构建高性能WEB站点笔记三

    构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...

  7. 【Visual C++】游戏开发笔记三十三 浅墨DirectX提高班之二 化腐朽为神奇:DirectX初始化四步曲

    这篇文章里,我们将迈出精通DirectX的第一步,先了解典型Direct3D程序的书写流程,然后学习COM接口的对象的一些思想,然后按照"四步曲"的思路,系统地学习DirectX的 ...

  8. 转载-LVS的三种工作模式

    来源地址:http://www.uml.org.cn/zjjs/201211124.asp 1.lvs简介 lvs是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立(中国人的项目) ...

  9. SurfaceFlinger学习笔记(三)之SurfaceFlinger进程

    概述 本系列是基于android Q 即android10 SurfaceFlinger学习笔记(一)应用启动流程 SurfaceFlinger学习笔记(二)之Surface SurfaceFling ...

最新文章

  1. 走进Java 7模块系统
  2. php 动态加载扩展,仿照PHP的实现简单的扩展动态加载
  3. 免费机器学习课程爆红:从概率与统计到全栈深度学习,英伟达工程师小姐姐整理...
  4. outlook 搜索框_日程管理,用 Outlook 也行
  5. vue js xlsx 读取 本地 excel
  6. java 字符 几个字节_java中字符串占几个字节
  7. oracle merge into 优化,ORACLE 10g 的 merge into用法
  8. Java文件类– java.io.File
  9. 【洛谷习题】又是毕业季II
  10. 电力IEC61850的基础知识和使用
  11. 如何查看java安装路径
  12. MII、RMII、GMII、RGMII接口详解及硬件设计注意事项
  13. php判断是否连续出现数字,php通过gbk编码判断 含有连续数字 可用于判断QQ号,手机号等。...
  14. 瑞禧PLGA-PEG-Val-Thr-Cys-Gly 聚乙二醇
  15. 大数据给交通行业带来的五大变革 | 交通数据的深度应用
  16. golang学习和校招经历
  17. python语言的三种基本结构_Python语言基础分支语句、循环语句.PPT
  18. 阿里云七天训练营学习(4):服务器管理软件(putty、ccaa)
  19. 华为和荣耀学编程计算机推荐,2020~2021笔记本电脑推荐(华为篇)
  20. 如何将heic转换成jpg呢?

热门文章

  1. Linux编程之安全
  2. 小米科技-瞿晋萍-米聊技术选型与架构
  3. 微信小程序获取当前日期
  4. 印度孟买机器人餐厅_亚洲50最佳餐厅榜单 | 解锁印度高逼格餐厅
  5. android 异源投屏,华为手机如何帅气投屏 无需APP也可以?
  6. 如何优雅地使用数学归纳法
  7. Lourens马雷首席执行官珠宝顾问南非,在赋权乡镇配饰品培训
  8. 有1,2,3,4-四个数字,能组成多少个不相同且没有重复数字的三位数?
  9. ultraedit32使用时发现打开txt文件…
  10. 明天19:30青年科学家 | 基于深度3D参数化滤波的视频多降质因素增强模型