原文:https://source.android.com/devices/tech/power/platform_mgmt
为了提高设备电池寿命,Android可以通过监测设备使用和觉醒来影响设备状态。在设备未使用时,平台可以通过进入休眠状态来暂停运行中的活动。
Doze(打盹)
当设备长时间不使用时,Doze会延迟应用程序后台CPU和网络活动,从而延长电池续航。
Doze中的空闲设备会定期进入维护窗口,在此期间应用程序可以完成待处理的工作(同步,作业等)。Doze然后重新开始睡眠更长的时间,然后紧跟着另一个维护窗口。平台持续Doze睡眠/维护序列,每次增加空闲时间,直到达到最多几小时的睡眠时间。在任何时候,Doze中的设备都会保持运动感知,如果检测到运动,会立即离开打盹。
每当用户关闭设备屏幕时,Android 7.0及更高版本都会扩展Doze以触发更轻量的优化集,即使用户继续四处移动,也能延长电池续航时间。
关键系统服务通常由设备制造商设置为免于Doze。用户还可以通过“设置”菜单从Doze中免除特定应用。但是,免除应用程序可能会导致设备电池耗尽。AOSP中默认禁用 Doze ; 有关启用Doze的详细信息,请参阅集成Doze。
Doze要求
Doze支持需要设备具有云消息服务,例如 Firebase云消息(FCM)。在设备处于Doze模式时,外部触发事件(例如云消息)可以暂时唤醒应用程序执行工作。
完全Doze支持还需要设备上的 重要运动检测器(SMD) ; 但是,Android 7.0及更高版本中的轻量级Doze模式不需要SMD。如果在以下设备上启用Doze,那么:
- 有SMD的设备,完全的Doze优化(包括轻量级优化)。
- 没有SMD的设备,只会发生轻量级的Doze优化。
Doze生命周期
当平台检测到设备空闲时,Doze开始;当一个或多个退出标准活动发生时,Doze结束。
侦测 | Doze期间 | 退出 |
---|---|---|
在以下情况下,平台检测到设备处于空闲: 1. 设备是静止的(使用重要的运动检测器)。2. 设备屏幕关闭了一段时间。当设备插入充电器时,Doze模式不会启用。 | 平台试图使系统保持睡眠状态,在维护窗口期间定期恢复正常操作,然后使设备进入睡眠状态更长的重复周期。在睡眠期间,以下限制处于活动状态:1. 应用不允许网络访问。2. App wakelocks被忽略了。3. 闹钟推迟。不包括AlarmClock闹钟和使用setAndAllowWhileIdle() 设置的闹钟(在Doze中每个应用限制为每15分钟1次)。此免除适用于必须显示事件提醒通知的应用程序(如日历)。4. 未执行Wi-Fi扫描。5. SyncAdapter 同步和JobScheduler 作业推迟到下一个维护窗口。6. 接收短信和彩信的应用会被置于临时白名单中,以便他们完成处理。 |
当平台检测到以下情况时,平台将从Doze退出设备:1. 用户与设备的交互。2. 设备移动。3. 设备屏幕亮起。4. 即将发生的AlarmClock闹钟。通知不会导致设备退出Doze。 |
Android 7.0及更高版本通过在屏幕关闭期间在设备空闲之前启用轻量级睡眠模式来扩展Doze。
doze_lightweight.png动作 | Doze | 轻量级的Doze |
---|---|---|
触发 | 屏幕关闭,使用电池,静止不动 | 屏幕关闭,使用电池(未插电) |
定时 | 连续增加维护期 | 具有维护窗口的重复N分钟时段 |
限制 | 无网络访问、唤醒锁或GPS / Wi-Fi扫描。闹钟和工作/同步被延迟。 | 无网络访问。除维护窗口期间外,作业/同步延迟被延迟。 |
行为 | 仅接收高优先级的推送通知。 | 可接收所有实时消息(即时消息,呼叫等)。高优先级推送通知消息可启用临时网络访问。 |
退出 | 运动,屏幕点亮或闹钟响铃。 | 屏幕点亮。 |
与App Standby的相互影响
- 处于Doze中的时间不计入App Standby。
- 当设备处于Doze时,允许空闲应用程序每天至少执行一次正常操作。
集成Doze
启用Doze时,支持SENSOR_TYPE_SIGNIFICANT_MOTION
的设备将执行完整的Doze优化(包括轻量级优化); 没有SMD的设备只执行轻量级的Doze优化。Android会自动选择合适的Doze优化,无需厂商配置。
设备启用Doze:
- 确认设备已安装云消息服务。
- 在设备
overlay
配置文件overlay/frameworks/base/core/res/res/values/config.xml
中设置config_enableAutoPowerModes
为true:
<bool name =“config_enableAutoPowerModes”> true </ bool>
AOSP中此参数默认为false(Doze被禁用)。
提示
- 尽可能使用FCM 下载消息。
- 如果您的用户要求立即看到通知,请使用 FCM高优先级消息。
- 在初始消息负载时提供足够的信息 (以避免不必要的连续访问网络)。
- 重要闹钟设置用
setAndAllowWhileIdle()
和setExactAndAllowWhileIdle()
。
测试和优化应用程序
在Doze模式下测试所有应用程序(尤其是预置的应用程序)。详情参见 测试Doze和App Standby。
注意: MMS/SMS/电话服务的功能独立于Doze,即使设备处于Doze模式,也会始终唤醒客户端应用程序。
网友评论