AOSP的Doze模式-LightIdle初识

前言

从Android 6.0开始,谷歌引入了Doze模式(打盹模式)的省电技术延长电池使用时间。根据第三方测试显示,两台同样的Nexus 5,开启的Doze的一台待机能达到533小时,而未开启Doze的一台待机只能达到200小时。Doze省电效果十分明显。

Doze省电技术原理

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

操作

低电耗模式-deep idle

轻度低电耗模式-light idle

触发器

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

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

计时

随维护时段依次增加

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

限制

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

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

行为

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

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

退出

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

屏幕开启

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

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

Light idle 状态机时序图

AOSP的Doze模式-LightIdle初识_第1张图片

从上述状态流转图来看,正常情况(手机有网络)下最快16mins进入light idle模式,每隔5mins进入1min的维护窗口期。

Light idle 状态机流转图

AOSP的Doze模式-LightIdle初识_第2张图片

Light Idle 状态机状态转换表

状态 (State)

进入条件 (Entry Conditions)

触发方法/逻辑

LIGHT_STATE_ACTIVE

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

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

LIGHT_STATE_INACTIVE

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

从 LIGHT_STATE_ACTIVE 通过 becomeInactiveIfAppropriateLocked() 进入。

LIGHT_STATE_IDLE

设备空闲一段时间(无用户交互或运动)。

从 LIGHT_STATE_INACTIVE 通过超时(some time transpires)自动进入。

LIGHT_STATE_WAITING_FOR_NETWORK

从 LIGHT_STATE_IDLE 退出时,检测到无网络连接。

从 LIGHT_STATE_IDLE 通过条件分支(no network)进入。

LIGHT_STATE_IDLE_MAINTENANCE

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

从 LIGHT_STATE_IDLE 或 LIGHT_STATE_WAITING_FOR_NETWORK 通过默认转换进入。

LIGHT_STATE_OVERRIDE

设备进入 Deep Idle 的 STATE_IDLE 状态,Light Idle 状态机被冻结。

由 Deep Idle 状态机触发(deep goes to STATE_IDLE)。

相对Light Idle我更关注Doze的Deep Idle,目前大部分友商主要是对deep idle进行深度定制。

你可能感兴趣的:(功耗)