AOSP的Doze模式-DeepIdle 初识

前言

从Android 6.0开始,谷歌引入了Doze模式(打盹模式)的省电技术延长电池使用时间。如果用户长时间未使用设备,低电耗模式会延迟应用后台 CPU 和网络活动,从而延长电池续航时间。根据第三方测试显示,两台同样的Nexus 5,开启的Doze的一台待机能达到533小时,而未开启Doze的一台待机只能达到200小时。Doze省电效果十分明显。

Doze省电技术原理

Doze模式细分light idle和deep idle,本文主要介绍deep idle

操作

低电耗模式-deep idle

轻度低电耗模式-light idle

触发器

屏幕关闭、电池供电(未插电)、静止

屏幕关闭、电池供电(未插电)

计时

随维护时段依次增加

随维护时段反复持续 N 分钟

限制

无法访问网络、唤醒锁定和 GPS/WLAN 扫描;闹钟和作业/同步被延迟

无法访问网络;作业/同步被延迟(维护窗口除外)

行为

仅接收优先级较高的推送通知消息

接收所有实时消息(即时消息、致电等);优先级较高的推送通知消息可以暂时访问网络

退出

动作、屏幕开启或闹钟响铃

屏幕开启

Doze技术原理主要分为状态机+省电管控(后台 CPU 和网络活动)措施,延长待机续航的效果。

其中状态机的目的主要识别用户长时间未使用设备场景并标记Idle状态,省电管控措施主要是Idle状态内限制应用后台 CPU 和网络活动

0

1.DeepIde状态机

为了更好地识别用户未使用场景,Doze模式设计了状态机机制,主要包含长期灭屏、无运动、无显著运动、无GPS变化的状态检测与流转。其中运动检测和GPS侧重的是静止状态的识别。

1.1 DeepIde状态机时序图

待机灭屏时会先开启一个30分钟的闹钟检测灭屏状态持续30分钟,满足灭屏待机30分钟后,再开启30分钟的低功耗运动检测查看是否为静止状态,满足30分钟保持静止状态后,再开启4分钟的高精度ACC动作检测是否是绝对静止状态,满足4分钟持续的绝对静止状态后,再开启30秒的GPS定位检测是否没有定位变化,满足30秒没有定位条件,就可以进入deep idle状态,对可以放心对操作系统层上的应用进行功耗限制了。

// 30分钟的待机灭屏时长检测定义private long mDefaultInactiveTimeout =        (30 * 60 * 1000L) / (!COMPRESS_TIME ? 1 : 10);// 30分钟的低功耗普通运动检测private long mDefaultIdleAfterInactiveTimeout =        (30 * 60 * 1000L) / (!COMPRESS_TIME ? 1 : 10);// 4分钟的高耗电高精度的ACC运动检测private long mDefaultSensingTimeout =        !COMPRESS_TIME ? 4 * 60 * 1000L : 60 * 1000L;        // 30秒的GPS位置检测private long mDefaultLocatingTimeout =        !COMPRESS_TIME ? 30 * 1000L : 15 * 1000L;

0

从上述时序图可以看出,进入deep idle需要1小时4.5mins,idle周期时间为1小时、2小时、4小时、最大6小时,维护窗口时间为5mins。

移动检测:主要分为SIGNIFICANT_SENSOR检测和加速度传感器检测,区别是一个低功耗精度没那么高和一个高功耗精度高

1.2 DeepIde 状态机流转图

0

注:QUICK_DOZE_DELAY是一种特殊状态,当设备处于低电量时会进入,因此正常情况LOCATING会切换到IDLE的,只是代码会执行到QUICK_DOZE_DELAY的。

1.3 Deep Idle 状态机状态转换表

状态 (State)

进入条件 (Entry Conditions)

触发方法/逻辑

STATE_ACTIVE

屏幕开启 OR 正在充电 OR 即将触发闹钟 OR 有紧急呼叫活跃。

初始状态,通过 becomeActiveLocked() 激活。

STATE_INACTIVE

屏幕关闭 AND 未充电 AND 无紧急呼叫。

becomeInactiveIfAppropriateLocked()(且未启用 Quick Doze)。

STATE_QUICK_DOZE_DELAY

同 STATE_INACTIVE,且关闭了位置、运动检测和显著运动监控。

becomeInactiveIfAppropriateLocked()(且启用 Quick Doze)。

STATE_IDLE_PENDING

开启显著运动监控(等待检测运动)。

从 STATE_INACTIVE 通过 stepIdleStateLocked() 进入。

STATE_SENSING

监控任意运动(包括显著运动和普通运动)。

从 STATE_IDLE_PENDING 通过 stepIdleStateLocked() 进入。

STATE_LOCATING

正在请求位置信息,且运动监控仍开启。

从 STATE_SENSING 通过 stepIdleStateLocked() 进入。

STATE_IDLE

关闭位置和运动检测,保持显著运动监控状态不变。

从 STATE_SENSING(无位置服务)或 STATE_LOCATING/STATE_QUICK_DOZE_DELAY 通过 stepIdleStateLocked() 进入。

STATE_IDLE_MAINTENANCE

空闲维护窗口(短暂唤醒以执行任务)。

从 STATE_IDLE 通过 stepIdleStateLocked() 进入。

2.DeepIde 省电管控措施

进入deep idle需要1小时4.5mins,deep idle周期时间为1小时、2小时、4小时、最大6小时,维护窗口时间为5mins。窗口期的意思就是每1,2,4,6小时的间隔留5分钟放风期,让被限制的应用有机会临时解除限制,进行后台活动,例如消息推送接收或数据同步。这里也体现出批量放风的功耗管控思维。

0

在休眠Idle期间,设备会受到以下限制:

1.应用无法访问网络。

2.应用唤醒锁定被忽略。

3.闹钟被延迟。闹钟响铃以及使用

setAndAllowWhileIdle() 设置的闹钟(当设备处于低电耗模式时,限于每个应用每 15 分钟 1 次)除外。此豁免规则适用于必须显示活动提醒通知的应用(如日历)。

4.无法执行 WLAN 扫描。

5.SyncAdapter 同步和

JobScheduler 作业被延迟,直到下一个维护时段才能恢复。

6.接收短信和彩信的应用被暂时列入白名单,以便它们可以完成处理任务。

3.退出DeepIde的机制

当平台检测到以下任意情况时,会使设备退出低电耗模式,从这里我们可以看出Doze模式进入是严进宽出的模式

1.用户与设备互动

2.设备移动操作

3.设备屏幕打开

4.AlarmClock 即将响铃

备注:消息通知不会使设备退出低电耗模式。

4.Doze白名单分类

什么时候配置白名单呢?一般是应用因被doze管控,导致一些消息接收不及时,需要根据是否第三方应用或系统内置应用进行不同路径的配置文件进行配置。

变量名

加载方式

作用范围

调用场景

组成/备注

用户应用白名单

mPowerSaveWhitelistUserApps

onStart中通过config文件加载

省电模式下所有用户应用

直接调用

基础用户白名单列表

mPowerSaveWhitelistUserAppIds

由mPowerSaveWhitelistUserApps生成

同mPowerSaveWhitelistUserApps

仅用于dump打印

用户白名单的ID形式(如UID)

mPowerSaveWhitelistUserAppIdArray

同mPowerSaveWhitelistUserAppIds

同mPowerSaveWhitelistUserApps

提供Binder远程调用

用户白名单ID数组,供AMS/PMS访问

系统应用白名单

mPowerSaveWhitelistSystemAppIds

onStart中通过config文件加载

所有省电模式下的系统应用

直接调用

基础系统白名单(含IDLE场景)

mPowerSaveWhitelistSystemAppIdsExceptIdle

onStart中通过配置文件加载

省电模式但排除IDLE状态的系统应用

Binder远程增删

系统白名单的子集(IDLE状态不生效)

混合白名单

mPowerSaveWhitelistAllAppIds

由以下两者组成:

所有省电模式下的全部应用(系统+用户)

仅用于dump打印

mPowerSaveWhitelistApps + mPowerSaveWhitelistUserApps

mPowerSaveWhitelistAllAppIdArray

同mPowerSaveWhitelistAllAppIds

同mPowerSaveWhitelistAllAppIds

向AMS/PMS设置全局白名单

全局白名单的数组形式,供系统服务调用

排除IDLE的白名单

mPowerSaveWhitelistExceptIdleAppIds

由以下两者组成:

省电模式但排除IDLE状态的全部应用

无直接调用(仅逻辑组合)

mPowerSaveWhitelistAppsExceptIdle + mPowerSaveWhitelistUserApps

mPowerSaveWhitelistExceptIdleAppIdArray

同mPowerSaveWhitelistExceptIdleAppIds

同mPowerSaveWhitelistExceptIdleAppIds

Binder远程调用

排除IDLE的白名单数组,功能与mPowerSaveWhitelistExceptIdleAppIds一致

Android手机的Settings也提供了Doze白名单的手动设置入口:

0

如果不配置白名单,新安装的应用默认是归为doze的自动管控规则,即优化选项

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Python Pandas高效操作数据库:从查询到写入的完整指南

一、环境准备与数据库连接 1.1 安装依赖库 pip install pandas sqlalchemy psycopg2 # PostgreSQL # 或 pip install pandas sqlalchemy pymysql # MySQL # 或 pip install pandas sqlalchemy # SQLite 1.2 创建数据库引擎 通过SQLAlchemy创建统一接口&#xff1a…

每日一题(小白)暴力娱乐篇31

首先分析一下题意,需要求出2024的因子,因为我们要求与2024互质的数字,为什么呢?因为我们要求互质说直白点就是我和你两个人没有中间人,我们是自然而然认识的,那我们怎么认识呢,就是直接见面对吧…

电控---printf重定向输出

在嵌入式系统开发中,printf 重定向输出是将标准输出(stdout)从默认设备(如主机终端)重新映射到嵌入式设备的特定硬件接口(如串口、LCD、USB等)的过程。 一、核心原理:标准IO库的底层…

快速认识:数据库、数仓(数据仓库)、数据湖与数据运河

数据技术核心概念对比表 概念核心定义核心功能数据特征典型技术/工具核心应用场景数据库结构化数据的「电子档案柜」,按固定 schema 存储和管理数据,支持高效读写和事务处理。实时事务处理(增删改查),确保数据一致性&…

【17】数据结构之图的遍历篇章

目录标题 图的遍历深度优先遍历 Depth First Search广度优先遍历 Breadth First Search 图的遍历 从图中某一个顶点出发,沿着一些边访遍图中所有的顶点,且使用每个顶点仅被访问一次,这个过程称为图的遍历.Graph Traversal. 其中&#xff0c…

简单接口工具(ApiCraft-Web)

ApiCraft-Web 项目介绍 ApiCraft-Web 是一个轻量级的 API 测试工具,提供了简洁直观的界面,帮助开发者快速测试和调试 HTTP 接口。 功能特点 支持多种 HTTP 请求方法(GET、POST、PUT、DELETE)可配置请求参数(Query …

Git进阶操作

Git高阶操作完全指南:解锁专业开发工作流 前言 在当今的软件开发领域,掌握高级Git技能已成为区分普通开发者与专业开发者的关键因素。根据最新的GitHub数据,熟练应用交互式暂存和Rebase等高级功能的开发者,其代码审查通过率平均提…

Python结合AI生成图像艺术作品代码及介绍

为实现生成图像艺术作品,我选用 Stable Diffusion 库结合 Python 编写代码。下面先展示代码,再详细介绍其原理、模块及使用方法等内容。 生成图片代码 import torch from diffusers import StableDiffusionPipeline# 加载预训练模型 pipe StableDiffu…

Linux操作系统--静态库和动态库的生成and四种解决加载找不到动态库的四种方法

目录 必要的知识储备: 生成静态库: 生成动态库: 解决加载找不到动态库的四种方法: 第一种:拷贝到系统默认的库路径 /usr/lib64/ 第二种:在系统默认的库路径/usr/lib64/下建立软链接 第三种&#xff1…

LLM中的N-Gram、TF-IDF和Word embedding

文章目录 1. N-Gram和TF-IDF:通俗易懂的解析1.1 N-Gram:让AI学会"猜词"的技术1.1.1 基本概念1.1.2 工作原理1.1.3 常见类型1.1.4 应用场景1.1.5 优缺点 1.2 TF-IDF:衡量词语重要性的尺子1.2.1 基本概念1.2.2 计算公式1.2.3 为什么需…

Leetcode 3359. 查找最大元素不超过 K 的有序子矩阵【Plus题】

1.题目基本信息 1.1.题目描述 给定一个大小为 m x n 的二维矩阵 grid。同时给定一个 非负整数 k。 返回满足下列条件的 grid 的子矩阵数量: 子矩阵中最大的元素 小于等于 k。 子矩阵的每一行都以 非递增 顺序排序。 矩阵的子矩阵 (x1, y1, x2, y2) 是通过选择…

如何在 Ubuntu 22.04 上安装、配置、使用 Nginx

如何在 Ubuntu 22.04 上安装、配置、使用 Nginx?-阿里云开发者社区 更新应用 sudo apt updatesudo apt upgrade检查必要依赖并安装 sudo apt install -y curl gnupg2 ca-certificates lsb-release安装nginx sudo apt install -y nginx# 启动nginx sudo systemct…

Linux:显示 -bash-4.2$ 问题(CentOS 7)

文章目录 一、原因二、错误示例三、解决办法 一、原因 在 CentOS 7 系统中,如果你看到命令行提示符显示为 -bash-4.2$,一般是 Bash shell 正在运行,并且它没有找到用户的个人配置文件,或者这些文件有问题而未能成功加载。这个提示…

QT6 源(34):随机数生成器类 QRandomGenerator 的源码阅读

&#xff08;1&#xff09;代码来自 qrandom.h &#xff0c;结合官方的注释&#xff1a; #ifndef QRANDOM_H #define QRANDOM_H#include <QtCore/qalgorithms.h> #include <algorithm> // for std::generate #include <random> // for std::mt1993…

第二篇:linux之Xshell使用及相关linux操作

第二篇&#xff1a;linux之Xshell使用及相关linux操作 文章目录 第二篇&#xff1a;linux之Xshell使用及相关linux操作一、Xshell使用1、Xshell安装2、Xshell使用 二、Bash Shell介绍与使用1、什么是Bash Shell(壳)&#xff1f;2、Bash Shell能干什么&#xff1f;3、平时如何使…

MCP(模型上下文协议)学习笔记

学习MCP&#xff08;模型上下文协议&#xff09;的系统化路径&#xff0c;结合技术原理、工具实践和社区资源&#xff0c;帮助你高效掌握这一AI交互标准&#xff1a; 在当今人工智能飞速发展的时代&#xff0c;AI技术正以前所未有的速度改变着我们的生活和工作方式。然而&#…

MIR-2025 | 多模态知识助力机器人导航:从复杂环境到高效路径规划

作者&#xff1a;Hui Yuan, Yan Huang, Zetao Du, Naigong Yu, Ziqi Liu, Dongbo Zhang, Kun Zhang 单位&#xff1a;北京工业大学信息科学与技术学院&#xff0c;北京工业大学计算智能与智能系统北京市重点实验室&#xff0c;中科院自动化研究所模式识别国家重点实验室与多智…

javaSE.泛型界限

现在有一个新的需求&#xff0c;没有String类型成绩了&#xff0c;但是成绩依然可能是整数&#xff0c;也可能是小数&#xff0c;这是我们不希望用户将泛型指定为除数字类型外的其他类型&#xff0c;我们就需要使用到泛型的上界定义&#xff1a; 上界&#x1f447;只能使用其本…

压缩包网页预览(zip-html-preview)

zip-html-preview 项目介绍 这是一个基于 Spring Boot 开发的在线 ZIP 文件预览工具,主要用于预览 ZIP 压缩包中的 HTML 文件及其相关资源。 主要功能 支持拖拽上传或点击选择多个 ZIP 文件自动解压并提取 ZIP 文件中的 HTML 文件在线预览 HTML 文件及其相关的 CSS、JavaSc…

QML之Overlay

Overlay&#xff08;覆盖层&#xff09;是QML中用于在当前界面之上显示临时内容的重要组件。 一、Overlay基础概念 1.1 什么是Overlay&#xff1f; Overlay是一种浮动在现有界面之上的视觉元素&#xff0c;具有以下特点&#xff1a; 临时显示&#xff0c;不影响底层布局 通…