安卓「暂停执行已缓存的应用」功能,我的个人使用记录
设备是 OPPO A3i 5G,ColorOS 15,6GB+2GB 虚拟内存
开启这个功能大概两三天后,变化不大,省电有点效果,但体感不强。日常重度使用基本感觉不出来这点区别。
后台体验方面,问题就比较突出了。切回微信或浏览器时,偶尔需要重新加载页面,不像以前那样秒开。用 MacroDroid 做自动化脚本后,监听网络变化的任务经常漏触发。看日志才发现被系统冻住了。
看了下谷歌官方的代码逻辑,这个功能的底层用的是 cgroup v2 freezer 冻结进程。简单说就是一旦冻结,进程完全暂停,不用 CPU,但也不能响应任何交互。
不过它冻结的条件很苛刻:
- 必须先变成「已缓存的应用」 —— 不能在前台、不能有前台服务、不能有可见窗口、不能播放音乐,基本就是个纯后台应用才有资格。
- 要经历 10 分钟的「消抖期」 —— 系统不会一上来就冻,而是先观察 10 分钟。这期间只要有任何活动(收到广播、有 binder 事务、持有文件锁),倒计时就会重置甚至取消冻结。
- 还有很多兜底条件 —— 文件锁、binder 事务、内核兼容性等等都会导致冻结失败,某些老版本内核甚至会把该冻结的应用直接杀掉而不是冻结。
这套机制的设计初衷是在不影响用户体验的前提下抠一点电量。但从结果看,反而是像 MacroDroid 这类守规矩、安静等待触发器的正规应用最容易被判定为可冻结对象,这就很没有必要了。
相关技术文献 「暂停执行已缓存的应用」是如何工作的
本文为我原创,未经授权禁止转载 | bilibili UID1319899187 | 掘金 ID1048290992076985