谷歌也看不下去了,安卓内存巨大但为何还杀后台

安卓是 Google 发起的,但现在安卓的一些行径,连 Google 也看不下去了。近日,安卓发起了一项针对安卓的调查 ——Google 认为很多 OEM 安卓机厂商,其推行的安卓系统存在严重的杀后台问题,App 难以在后台存活。

Google 最近和一些安卓厂商不对付了

Google 认为,现今很多 OEM 的安卓系统都违背了 Google 的政策,令 App 无法在后台持续运行。虽然大多数安卓应用并不需要在后台保留进程,但也有部分类别的确有此类需求,例如健康记录 App,需要持续记录数据。然而,部分 OEM 安卓系统却无法满足此类需求,安卓开源项目 AOSP 的错误跟踪器就曾经揭露出某些 OEM 厂商滥用安卓机制,禁止第三方应用在后台运行,甚至还杀死了 AccessibilityService 这个系统级别的无障碍服务进程。

Google 实际上为安卓系统制定了杀后台的规则,但 OEM 厂商们却在这方面并不透明,开发者和用户无法知道 OEM 安卓到底会杀掉怎么样的 App 后台。有时候,OEM 安卓厂商会将某些 App 加入白名单,例如部分社交和通讯软件,以确保消息的及时推送。但这些机制对于用户和开发者来说,相当于黑箱,人们无法判断到底哪个 App 能在后台运行、哪个不能,最终的体验并不如人意。

安卓基于 Linux 系统,本身拥有完善的多后台机制,在诞生之初其桌面级的“真后台”是玩家津津乐道的卖点。近年来安卓机的内存越来越大,甚至已经堆到了 16G 的容量,和桌面 PC 相比也不遑多让。但为何安卓生态中,杀后台的现象反而变严重了?这就来简单聊聊这个问题吧。

为什么安卓系统要激进杀后台?

原生安卓系统支持 App 后台保留进程,但传统上也有一套循序渐进的后台退出机制。在传统上,安卓系统会为 App 进程分配不同的状态,例如 Foreground_App(前台应用)、Visiable_App(可见应用)、Secondary_App(二级应用)、Hidden_App(隐藏应用)、Content_Provider(内容提供器)、Empty_App(空应用)等状态。当内存不足的时候,系统会优先终止 Empty_App 进程和服务,将内存释放出去;内存再次吃紧,就开始对 Content_Provider 动手脚了,以此类推。

安卓 App 不同的状态,系统会据此判断杀进程的优先级

但是,并不是每个 App 都老老实实为进程注册合理的状态的。很多安卓 App 会通过一些手段,来修改自己进程的属性,来长期驻留后台。

例如,一些流氓 App 将 startForeground 来把自己注册成为前台应用,让自己的后台成为最高优先级,永远不会被系统干掉;又例如,有流氓 App 会利用安卓的悬浮窗机制,设置一个 1 像素大小的透明悬浮窗,让 App 始终处于激活状态,避免后台被杀;又例如,流氓 App 们抱团取暖,后台进程利用安卓系统的周期性任务进行链式唤醒,开启一个 App 等于唤醒 N 个 App 的后台……

流氓 App 驻留后台的经典方法 —— 利用广播接收器触发后台自启动

App 们的这些行径,消耗了额外的资源,对续航和流畅的负面影响肉眼可见。

为此,官方的安卓系统也作出了一些应对。例如针对 App 乱注册 startForeground 状态,安卓 7.0 之后会在通知栏强制显示“XX 正在后台运行”;又例如安卓收紧了悬浮窗权限,使用悬浮窗必须开启相应开关;而安卓 11 则很大程度上了 App 之间的链式唤醒等等。

安卓 7.0 对很多后台运行的 App 都在通知栏有公示,后来这些 App 不得不改变后台驻留的方法

但道高一尺魔高一丈,安卓系统的很多限制后台机制,需要 App 使用较高版本的 TargetAPI 才能生效,而大量 App 仍使用老旧的开发规范,但用户却不可能抛弃其中的很多 App。因此,App 强行驻留后台的行径,对于用户的负面影响是实打实的,既然 Google 官方安卓无法做到,那就只能由第三方安卓 ROM 来动手了 —— 如果哪个牌子的安卓不做,就会在用户中落下“又卡又热又耗电”的坏口碑。

因此,OEM 安卓们杀后台,一个比一个狠。有其是在国内,一些安卓 ROM 甚至默认定时杀后台,即使 RAM 资源充足,绝大部分 App 也无法保留后台进程。安卓 ROM 激进杀后台的风气,就此产生。

为什么 App 要强行驻留后台?

安卓 ROM 激进杀后台是“果”,而 App 以各种行径强行驻留后台则是“因”。而这一切的“根”又是什么?恐怕和安卓的生态环境有关。

和苹果不同,安卓最初并没有提供 App 统一推送机制,这意味着每个 App 如果需要接受后台消息,那就需要自行驻留进程,以随时接收消息推送。不过这些年 Google 也对此作了改进,引入了 GCM/FCM 机制,App 可以调用 Google 服务框架 GMS,通过 Google 的服务器实现统一的消息转发,App 的消息推送可以由系统接管,整个过程 App 都无需保留后台,体验类似 iOS。

安卓上的 FCM 机制,类似于 iOS 的统一消息推送,但前提是系统和 App 接入 Google 服务

然而,这一套机制并非是强制性的,如果 App 不接入 GMS,甚至不上架 Google Play,那么完全可以无视这一切。而在以国内为典型的应用环境下,GMS 实际上并不可用,App 自行驻留进程、接受消息推送就成为了必选项。

因此,国内的安卓 App 使用了尤其多的手段,在安卓系统中驻留进程,这实际上很大程度是不得已而为之,当然也有商业上的考虑。而针对国内 App 种种驻留后台的手段,国内的安卓 ROM 为了保证续航和流畅,又不得不采取了更多的一刀切杀后台手段,这就造成了现今的情况。

为什么 Google 要整治安卓 ROM 杀后台?

安卓 ROM 整治了 App 后台驻留,带来了更好的续航和性能表现。然而对于用户而言,这并不是体验的全部。很多用户就遇到了这样的情况 —— 使用某个 App,例如音乐 App 听歌,切到后台一会儿,音乐就停了,因为系统把音乐 App 进程给杀了。但用户可不知道这是系统做的,只会认为这是音乐 App 的毛病。一时间,这音乐 App 就荣获差评。

Google 在 Play 商店中观察到了不少这样的差评,而这显然不是开发者的错 —— 在 App 驻留后台越来越卷的风气下,老老实实按照规范开发的 App,反而后台更容易被系统强行中断,反映在用户实际体验上就是该 App 在后台好端端就没了,用户觉得这 App 肯定有 Bug。

为了呼吁系统不要乱杀 App 后台,开发者们甚至还专门做了一个“求别杀我的 App”的 App

开发者无端背锅,而这问题显然又不是开发者能解决的。Google 不得已亲自插手,来整治安卓 ROM 乱杀后台的现象。

目前 Google 正邀请第三方应用开发者提供反馈,想知道哪些手机品牌机型杀后台严重,以便进行更加深入的调查。

安卓厂商要如何应对?

由于众所周知的原因,Google 并不在国内展开账号相关的服务,国内的安卓生态是和 Google 脱节的。因此,对于 Google 的相关整治,应该对国内的安卓产品影响不大。

但是,也有不少国内安卓厂商开展海外业务,在海外市场,Google 的话语权举足轻重。Google 有可能对安卓厂商施加压力,以让安卓厂商改变系统的杀后台策略。在这样的背景下,国内外的机型分别采用不同的杀后台策略,就显得很有必要了。在用于国外机型的国际版 ROM 中,安卓厂商应该重视 Google 的意见,对杀后台策略进行一定程度的修改。

不过我们也要意识到,安卓 ROM 激进杀后台造成的负面体验,在国内也是存在的。但目前国内的安卓生态迫使安卓厂商出此下策,要如何改变现状?

统一推送联盟有望从根源上解决系统杀后台和 App 需要后台保持推送服务的矛盾

这两年,工信部联合了主流安卓厂商,共同推进统一推送联盟。App 接入了相关体系后,即可实现系统级推送,无需驻留后台也可以接收消息。统一推送服务需要安卓 ROM 和 App 同时支持,好消息是,目前统一推送服务已经覆盖了华为、OPPO、vivo、小米等多家国内品牌,相关标准与成果也将纳入中国信通院与中国互联网协会共建的“中国移动基础服务平台”(China Mobile Service,CMS)的相关体系之中,并在 2021 年中国互联网大会上正式发布。希望统一推送联盟能一改国内 App 驻留后台的风气,让安卓 ROM 没有激进杀后台的理由吧。

总结

总的来说,安卓 ROM 之所以如此激进杀后台,是和安卓 App 的行径息息相关的,而这一切的根源又是缺乏统一推送服务的安卓生态。随着国外 Google 对安卓掌控力的加强,以及国内统一推送服务的普及,情况有望得到改观,希望安卓 ROM 和 App 们未来能有更好的用户体验吧。