NoActive 深度睡眠 Doze - 锁屏自动进入休眠
什么是深度睡眠(Doze)
Android 的 Doze 模式可以在设备长时间不使用时,限制后台应用的网络访问和唤醒活动,大幅降低待机功耗。
NoActive 的深度睡眠机制
默认行为
NoActive 默认在设备锁屏 60 秒后,强制非系统应用进入深度睡眠。
触发条件(同时满足)
- 设备已锁屏
- 锁屏持续超过 60 秒
- 应用不是系统应用
- 应用当前没有以下活动:
- 正在播放音频/视频
- 正在定位
- 正在录音
- 正在执行网络传输
豁免场景
满足以下任一条件的应用不会被强制进入深度睡眠:
- 有媒体播放或音频播放活动
- 正在定位
- 正在录音
- 正在上传/下载数据
- 有常驻通知(前台服务)
- 已连接 VPN
这与 NoActive 的特殊免冻结场景是一致的。
dozeType 配置
通过 MasterConfig.json 的 dozeType 字段可以调整深度睡眠的触发时机:
| 配置值 | 含义 | 推荐度 |
|---|---|---|
| off | 关闭深度睡眠 | 不需要时使用 |
| locked | 锁屏后触发 | ⭐⭐⭐⭐⭐ 推荐 |
| screenOff | 息屏后触发 | 更激进 |
三种模式对比
| 对比 | off | locked | screenOff |
|---|---|---|---|
| 触发条件 | 不触发 | 锁屏 60 秒后 | 息屏 60 秒后 |
| 敏感度 | 最低 | 适中 | 最高 |
| 省电效果 | 差 | 中 | 好 |
| 可能副作用 | 无 | 极少 | 息屏误判 |
locked vs screenOff
- locked:需要设备进入锁定状态(通常按电源键后就是锁定状态)
- screenOff:只需要屏幕关闭,不要求设备锁定
大多数情况下两者效果相同。如果你的设备在某些场景下"息屏但未锁定"(如通知覆盖),screenOff 会比 locked 更早触发。
深度睡眠失败的处理
部分定制 ROM 上深度睡眠可能失败——这可能是系统层面的限制。
好消息是:NoActive 的深度睡眠失败 ≠ 系统的 Doze 失败。Android 系统会在自己判断合适的时机仍然进入 Doze,所以即使 NoActive 这层没成功,整体省电效果依然存在。
与冻结的配合
冻结是让进程暂停执行,深度睡眠是让系统层面进入休眠。两者配合:
- 冻结:应用后台立即暂停
- 深度睡眠:锁屏 60 秒后进入更深层次的休眠
→ 继续 FCM 推送解冻