手机冻结技术发展时间轴
手机冻结技术发展时间轴
苹果为啥那么领先呢?
厂商 | 启动时间 | 技术方案 | 特点 |
苹果 | 2010 (iOS 4) | 墓碑机制 | 冻结进程状态并压缩内存,保留应用快照,恢复速度快,iOS中各种资源上面的管控更精细化,所以整体来说性能和功耗还不错。 |
华为 | 2013 | cgroups freezer | 通过 /dev/frz挂载 cgroup 实现冻结,拦截 Binder 通信避免阻塞 |
OPPO | 2013 | Linux 信号(SIGSTOP/CONT) | 早期用信号 18/19 控制进程,后转向 cgroups |
小米 | 2014 | cgroups freezer | 集成于 MIUI 系统,支持动态调整冻结阈值 |
魅族 | 2015 | Linux 信号(SIGSTOP/CONT) | Pro 5 机型首用,针对 Service/Broadcast 优化,后转向 cgroups |
一加 | 2015 | cgroups freezer | 与 OxygenOS 深度整合,支持后台应用分级冻结 |
vivo | 2017 | cgroups freezer | 通过 Funtouch OS 实现智能冻结策略,侧重省电 |
TCL | 2019 | cgroups freezer | 将进程迁移至冻结组,系统给进程添加冻结伪信号,当进程回到用户空间时,处理冻结伪信号进入冻结状态 |
AOSP | 2020 | cgroups freezer | Android 11 首次引入 |
cgroups freezer原理:
通过内核的 freezer子系统冻结进程组,无感知暂停 CPU 调度,保留内存状态
优势:避免信号拦截问题,支持层次化冻结(父 cgroup 冻结时子 cgroup 同步冻结)。
Linux 信号原理:
发送 SIGSTOP(19)冻结进程,
SIGCONT(18)恢复,依赖进程信号处理逻辑
局限:易被应用捕获或忽略,兼容性较差。
Android方案主流使用cgroups方案,比较成熟。而不是linux signal ,linux signal 会和进程trace、debug等冲突。
AOSP原生冻结方案
cgroup 最初由 Google 工程师 Paul Menage 和 Rohit Seth 在 2006 年提出,是一种细粒度资源控制的Linux内核机制。于 2007 年合并到 Linux 内核主线中。然而 Google 原生系统直到 Android 11 或更高版本上才支持 CACHE 应用的 CPU 冻结功能。当应用切换到后台并且没有其他活动时,系统会在一定时间内通过状态判断,将进程 ID 迁移到冻结的 cgroup 节点上,实现冻结 CACHE 应用。这项功能可以减少活跃缓存应用在后台存在时所消耗的 CPU 资源,从而达到节电的目的。当应用再次切换到前台时,系统会将该应用的进程解冻,以实现快速启动。
Android 原生冻结方案版本演进对比表
Google和苹果的时间差异感觉有10年了
在中国,app连进入background的adj都不怎么愿意,各种app的保活提高优先级黑科技的使用,让Android生态全球最不和谐,应用会进入 CACHED_APP_MIN_ADJ的状态比较难,换句话说但凡应用后台收发广播或service行为立刻就变成非cache进程了,且如果冻结即时通讯应用,由于没有消息推送的解冻机制,会导致被冻结即时通讯应用消息接收不到。
版本 | 默认状态 | 冻结延迟 | 核心改进 | 技术实现 |
Android 11(2020年) | 默认关闭 | 10 分钟 | • 初版功能引入,基于 cgroup freezer• 支持 adj ≥ 900的缓存应用冻结 | • 通过 /sys/fs/cgroup///cgroup.freeze写入 1/0 控制冻结 |
Android 12(2021年) | 默认开启 | 10 分钟 | • 稳定性优化• 修复冻结唤醒问题 | • 沿用 cgroup v1,优化 Binder 兼容性 |
Android 13(2022年) | 默认开启 | 10 分钟 | • Binder 驱动支持冻结状态• 避免跨进程通信阻塞,优化大量的ANR问题 | • 新增 freezeBinder()接口,对进程的 binder 先进行冻结,这一步禁掉该进程对同步binder请求的接收和处理,以及对异步binder请求的处理,因为之前如果随意的冻结应用,会导致一些应用后台的跨进程行为异常,例如在binder通信期间。 |
Android 14(2023年) | 默认开启 | 0-10 秒 | • 延迟大幅缩短• 联动内存压缩(zRAM)• 优化广播合并机制 | Android 14还针对广播进行了优化。为了配合应用的冻结机制,系统调整了应用在进入缓存状态后接收context-registered广播的方式。这些优化使得Android 14能够进一步减少应用的冷启动时间。在8GB设备上,App的冷启动时间减少了20%,而在12GB设备上更是减少了30%以上,为用户带来了更快的启动速度。同时,Android 14还对ART编译器进行了优化,使得代码大小在不影响性能的前提下平均减少了9.3%,从而有效地减少了内存占用。 |
Android 15(2024年) | 默认开启 | 0-10 秒 | • cgroup v2 + AI 预测• 异步 Binder 队列• 与内存压缩深度联动 | • 废弃 enableFreezer,完全集成至 CachedAppOptimizer |
Android 16(2025年) | 默认开启 | 0-10 秒 | 新增普通模式Cache进程冻结激进模式Home进程冻结(默认关闭) | Android 16 冻结机制整体没有太多的变化,主要是提出一个激进模式(默认关闭)回收adj 600以上的进程,从侧面也说明Google也发觉冻结cache进程的效果不是很大。冻的应用不够多也很容易被频繁解冻。但是趋势没有变化,AOSP冻结是朝着我们国内厂商的冻结策略发展,即冻更多应用,冻更久的趋势。 |
后台冻结方案好不好用,关键看app退到后台能多快进入冻结,能冻结多久,能冻结多少进程。AOSP也是每年持续优化改进。