第2章 Android 电源状态机:亮屏/灭屏、休眠深度、充电状态对策略的影响
2.1 核心概念解释
Android 系统的电源管理核心是电源状态机,它将设备运行状态划分为有限个确定性阶段,每个阶段对应不同的功耗水平和系统可用性。状态转换由用户行为、系统超时、硬件中断或充电状态变化驱动。理解状态机是选择节电策略的基础。
- 亮屏 (Screen On):用户主动操作或通知唤醒屏幕,CPU 保持最高活跃频率,网络、传感器、触控、渲染管线全开,典型功耗 300–800 mW。
- 灭屏 (Screen Off):用户无操作超时后屏幕关闭,但系统可能仍处于浅度休眠,部分进程可运行,功耗骤降至 50–200 mW。
- 休眠深度 (Doze / Suspend):系统根据空闲时长递增休眠深度,从浅度 Doze(冻结应用、限制网络)到深度 Suspend-to-RAM(CPU 挂起、内存自刷新),功耗可低至 2–10 mW。
- 充电状态:连接充电器时,系统常放宽背景活动限制,允许更高频率执行任务,同时利用 AC 供电补充电池,策略上通常不主动降频。
2.2 电源状态机原理图解
下图展示了 Android 电源管理的五状态转换模型,箭头标注触发条件,底部说明框解释各核心状态对节电策略的影响。
状态转换条件与策略影响可进一步归纳为下表:
| 当前状态 | 触发转换 | 目标状态 | 节电策略调整 |
|---|---|---|---|
| 亮屏活跃 | 超时灭屏 | 灭屏浅睡 | 停止屏幕渲染、进入Doze浅度 |
| 灭屏浅睡 | 持续空闲 | 深度睡眠 | 挂起CPU,进入Suspend-to-RAM |
| 深度睡眠 | 硬件中断/闹钟 | 唤醒/恢复 | 恢复系统,可能触发亮屏 |
| 亮屏/灭屏 | 插入充电器 | 充电状态 | 放宽背景活动限制,关闭降频 |
| 充电状态 | 灭屏+空闲 | 灭屏浅睡/深度睡眠 | 仍可休眠,但充电时唤醒阈值降低 |
2.3 类比说明
把系统状态比作人的睡眠周期:
- 亮屏活跃——清醒工作:眼睛睁着,大脑全速运转,随时响应。
- 灭屏浅睡——闭眼打盹:表面安静,但大脑仍能听见周围声音,易唤醒。
- 深度睡眠——熟睡:意识几乎关闭,只有呼吸和心跳,需要强力刺激才能醒。
- 充电状态——吃饭补充能量:人体处于放松状态,可以继续消化吸收,但不会完全休息。
- 唤醒/恢复——被闹钟叫醒:从熟睡快速过渡到清醒,往往需要几秒时间恢复。
2.4 常见误区辨析
- 误区:灭屏 = 深度睡眠
正确:灭屏后系统先进入浅度 Doze,再根据空闲时长递增深度。除非电量极低或强制休眠,否则不会立刻进入深度睡眠。 - 误区:充电时系统不会休眠
正确:充电状态下系统仍可进入浅睡或深度睡眠(比如夜间充电),但 Doze 深度和进入条件可能比电池供电时更宽松。 - 误区:深度睡眠下所有硬件都断电
正确:深度睡眠保留内存自刷新、RTC 时钟和少量唤醒控制器(如WiFi、蓝牙、Alarm),并非完全断电。
2.5 练习题
-
题目:当用户按下电源键关闭屏幕,且未触碰设备 30 分钟后,系统最可能处于哪个状态?
A. 亮屏活跃 B. 灭屏浅睡 C. 深度睡眠 D. 充电状态
✅ 答案:C。30 分钟空闲已超过深度睡眠阈值(通常 5–15 分钟),系统进入 Suspend-to-RAM。 -
题目:以下哪种事件 不能 将系统从深度睡眠唤醒?
A. 按电源键 B. 收到短信 C. 移动鼠标 (OTG) D. 定时闹钟
✅ 答案:B。深度睡眠下 modem 通常关闭,短信不会产生唤醒中断;实际取决于硬件设计,一般情况下短信通过基带,但需要 RIL 唤醒。 -
题目:判断对错:充电时系统无法进入深度睡眠,因为充电需要保持 CPU 运行。
❌ 错误。充电状态只是放宽限制,系统仍可进入深度睡眠,充电器通过 PMIC 持续供电,CPU 可挂起。
2.6 应用边界
电源状态机在以下场景会受到制约,理解边界有助于合理设计节电策略:
- 后台音频/音乐播放:系统会提升 wakelock 级别,阻止进入深度睡眠,即使灭屏也仅停留在浅度 Doze。
- 传感器持续监听(计步器、接近传感器):硬件 Sensor Hub 允许深度睡眠下工作,但若应用频繁读取,会触发唤醒。
- 低电量特殊策略:当电量低于 5% 时,部分厂商会强制跳过浅睡,直接深度关屏,缩短唤醒响应时间以保电。
- 分屏/画中画:即使屏幕亮着,若窗口完全被覆盖(如画中画),系统可能将部分管道置入低功耗模式,但仍是亮屏状态。
- 投影/投屏:外部显示设备场景下,主屏可关闭,但系统需保持解码渲染,实际状态介于亮屏浅睡之间。