Android 墓碑机制解析 - 从系统 Doze 到应用冻结
什么是 Android 墓碑
Android 墓碑(Tombstone)机制,是指将后台应用进程置于暂停执行状态的一种优化手段。当应用不再处于前台时,系统可以通过冻结其进程来阻止 CPU 继续为该应用分配时间片,从而实现降温和省电的效果。
系统原生方案的局限
Android 系统原生提供了后台省电机制,但存在明显局限:
Doze 模式
Android 6.0 引入的 Doze 模式,在设备静止一段时间后进入深度睡眠,限制后台活动。但 Doze 对"设备正在移动"的检测比较宽松,很多场景下无法真正进入深度睡眠。
App Standby
Android 6.0 同时引入的应用待机模式,将不活跃的应用标记为待机状态,限制其网络访问和后台任务。但这种限制是"软限制",应用仍可通过多种途径唤醒。
系统自带冻结
部分定制 ROM 提供了后台应用冻结功能,但这些功能通常基于白名单策略,且无法精细化控制每个应用的行为。
NoActive 的系统框架方案
NoActive 与上述方案的核心差异在于运行层级:
| 对比项 | 系统 Doze | 黑阈 | NoActive |
|---|---|---|---|
| 运行层级 | 系统服务 | 普通应用 | Xposed Hook 系统框架 |
| 冻结机制 | 状态标记 + 调度限制 | Shell 命令强制停止 | Cgroup Freezer / Kill 信号 |
| 广播拦截 | 无 | 部分 | Hook 广播分发,屏蔽被冻结应用 |
| ANR 处理 | 原生 ANR 检测 | 无 | Hook ANR 事件,避免误杀 |
| 内核依赖 | 无 | 无 | 需内核模块配合 |
事件驱动的冻结流程
NoActive 采用事件驱动模型:
- 应用切换至后台 → 3 秒后触发冻结
- 应用切换至前台 → 立即解冻
- 接收广播 → 屏蔽被冻结应用的广播,避免广播 ANR
- 计算 oom_adj → 修改后台应用优先级
这套流程完全基于系统框架层 Hook,应用自身无需任何配合。
→ 继续了解 NoActive 与其他墓碑工具对比