如今 Android 手机似乎正在陷入一个怪圈,尽管内存变得越来越大,使得 12GB 内存逐渐普及、18GB 内存也已出现,甚至于出现了虚拟内存技术,然而各大手机厂商的系统则在以更强的力度 " 杀后台 "。为此,在收到了越来越多开发者的投诉后,此前在 2021 年 6 月谷歌发布了相关问卷,调查 Android 手机的 " 杀后台 " 问题。
在一年后举行的 2022 I/O 开发者大会上,谷歌方面再度表示正在努力从多个角度尝试解决 " 杀后台 " 的问题,并透露 Android 13 的 AOSP 源码中添加了对 MGLRU(多页面回收策略)的支持,而借助 MGLRU,在 75% 内存占用时减少了 85% 的后台误杀情况。
早在 2018 年时,谷歌方面就收到了开发者关于 OEM 厂商随意杀后台的投诉,当时在 AOSP 上就已有开发者提交了 OEM 厂商滥用 Android 核心权限、施行严苛后台管控机制的文档。到了 Android 11,谷歌在与海外网友交流时也曾强调,会遏制手机厂商随意杀后台的行为。
曾几何时," 杀后台 " 对于 Android 用户来说是一个非常正面的词汇,有的 Android 用户会选择用 ROOT 后安装绿色守护等应用的方式,来实现更好的后台管理,而具备自动清理后台应用的功能也更是成为当时 Android 手机的标配。那么为什么遏制 " 杀后台 " 会在 Android 13 中,成为谷歌方面宣称的新功能呢?
其实,这是因为矫枉过正。在 SoC 功耗水平大幅度增长、5G 基带成为耗电大户的情况下,智能手机机身尺寸增长有极限、且消费者更加青睐轻薄的设计,都造成了手机厂商对于续航的极度关注,而强制关闭驻留在后台的应用,来节约系统资源就成为了手机厂商提升性能与续航的法宝。
事实上,手机厂商也很无奈,如果允许应用长时间驻留后台,就意味着功耗与性能开销变大,此时用户感知的结果,就是续航不够,总是需要频繁地充电、而且还可能会卡顿。
一旦手机给用户带来这种负反馈,也意味着产品口碑的下降,这在当下这个市场竞争已经极为充分的情况下无疑是不可接受的。所以不仅仅是国内手机厂商,就连海外厂商也在 " 杀后台 " 这件事上一个赛一个严苛,甚至到了去年 6 月,有用户发现某些 OEM 甚至强制关闭了无障碍服务 AccessibilityService。
但实事求是的讲,这 " 锅 " 手机厂商最多只能占三分之一,另外三分之一则是谷歌在设计 Android 时埋下的伏笔。
众所周知,谷歌为 Android 设计的内存回收机制,是只有当系统回收了所有的缓存后,发现依然不足以提供足够的内存来维持系统和应用的流畅运行后,才会开始根据打开顺序强制关闭部分应用,将其所占用的内存回收。与此同时,Android 系统采用的后台机制与 iOS 的 " 墓碑机制 " 不同,iOS 是伪多任务、而 Android 则是 " 真后台 "。
Android 的这项设计也就意味着,打开的应用越少系统的负载就越低,用户的使用就越流畅。而 Android 与 Windows 尽管同为多任务操作系统,但手机的屏幕显然要远小于 PC,这就使得用户同一时间最多只会使用一两个应用,此时更多的应用就必然要被放在后台。
面对这一现实,手机厂商的解决方案就是将后台杀干净,然后用 LPDDR5 内存、UFS 3.1 存储芯片等硬件升级,来降低用户启动应用的等待时间,达到与应用驻留后台近似的效果。
" 杀后台 " 策略发展到现在,就出现了手机厂商遇到将 " 白名单 " 之外其他应用被移到后台时干脆就直接将其关闭,让系统获得最好的状态,这也是当初 Android 手机 " 游戏模式 " 的理论基础。但问题是,手机厂商 " 杀后台 " 的策略尽管把用户服务周到了,却全然不顾开发者的利益。
开发者需要应用驻留后台,其实主要是为了 " 保活 "。应用为了接受后台消息就需要自行驻留进程,以随时接收消息的推送,不然用户就会出现总是收不到消息的情况,使得体验极为糟糕。例如有的应用在后台挂着挂着就没了,逼得用户只能一遍又一遍地看 APP 的启动页广告。久而久之,被迫频繁看广告的用户自然就不干了,所以也就有了工信部因 " 用户反映强烈投诉较多 " 而对开屏广告进行治理。而损失了部分广告收入的开发者自然也会向谷歌方面投诉,要后者管一管手机厂商无脑杀后台的操作。
当然," 杀后台 " 之风愈演愈烈,最后三分之一的原因其实是出在开发者自己身上。由于 Android 生态的自由开放,在 Android 8 之前,用户当时头疼的并不是后台应用被关闭、而是后台 " 杀不尽 ",彼时许多应用为了保活可谓是各出奇招,选择用链式唤醒、随意缓存、强制自启等方式扎根在后台,直接导致 Android 背上了 " 卡顿 " 的名声。
一句话,开发者和 OEM 厂商围绕着 " 杀后台 " 的矛盾,直接原因就是双方的利益不一致,而且两者之间很难形成利益共同体,少数形成利益共同体的应用也早就进入了手机厂商的白名单。没错," 杀后台 " 之所以让普通用户感知不明显,就是因为微信、QQ、微博、抖音、淘宝等日常打开频率较高的应用,几乎个个都是手机厂商 " 白名单 " 的常客。
国内的 Android 开发者长期以来在开发应用时,首先需要思考的问题,就是 " 我的应用能像微信那样一直在手机运行吗?为什么微信一直在手机后台就能收到消息 "。毕竟不患寡而患不均,作为普通的 Android 开发者自然就会向谷歌方面投诉,不然就是永远都无法在巨头环伺下出头。
那么问题来了,谷歌在 Android 13 上推出的 MGLRU(Multi-Generational Least Recently Used),真能改变手机厂商这种频繁 " 杀后台 " 的现状吗?从技术角度来看,谷歌方面是很有信心的。因为 MGLRU 是传统内存管理算法 LRU(缓存淘汰)的升级版,而 LRU 则是基于这样的一种假设,即用户长期不被使用的数据在未来被用到的几率也不大,所以当数据所占内存达到一定阈值时,会移除掉最近最少使用的数据。
但 LRU 算法的逻辑用在智能手机上可能并不适用,毕竟应用被用户挂在后台时间的早晚与使用频率并没有太多关系。所以 MGLRU 的策略是将 Android 后台应用分为几组,每一组都是由上一组被使用的后台应用组成,通过差分扫描来标记时间上存在较长的后台应用,并最终计算出可以安全关闭的应用。根据谷歌方面的说法,MGLRU 实现了在 75% 内存占用时减少了 85% 的后台误杀情况。
然而 MGLRU 能够起到的效果有多大,会不会改变手机厂商目前杀后台政策,我们所持有的是相对悲观的态度。毕竟 Android 的真后台机制就代表着,杀后台的强度越高手机处于低负载的时间就会越多,用户感觉使用流畅的时间就越长。并且更为重要的一点是,应用被杀后台并不会影响到手机厂商的利益,反正有白名单机制存在,真正的利益相关方早就被保护起来了。
因此在我们看来,或许只要手机厂商不再搞出强制关闭 AccessibilityService 服务这种违反相关条款的操作,谷歌其实是管不了手机厂商第三方 ROM 是不是会应用 MGLRU 这件事的。
赞(9)