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

【PConline杂谈】安卓是由谷歌发起的 , 但是现在安卓的一些行为是谷歌无法观看的 。近日 , 安卓在安卓上发起调查 , —— ——Google认为 , 很多OEM安卓机厂商的安卓系统存在严重的后台查杀问题 , 应用很难在后台生存 。

谷歌最近没有向一些安卓供应商付款

谷歌认为 , 很多OEM安卓系统违反了谷歌的政策 , 使得App无法在后台持续运行 。虽然大多数安卓应用不需要在后台保存流程 , 但有些类别确实有这样的要求 , 比如健康记录应用 , 需要连续记录数据 。然而 , 一些OEM安卓系统无法满足这一需求 。开源安卓项目AOSP的错误追踪器曾爆料 , 部分原始设备制造商滥用安卓机制 , 禁止第三方应用在后台运行 , 甚至扼杀了系统级无障碍服务流程AccessibilityService 。

谷歌实际上为安卓设定了杀后台的规则 , 但OEM在这方面并不透明 , 开发者和用户无法知道安卓会杀什么样的App后台OEM 。有时候 , OEM安卓厂商会在白名单中增加一些应用 , 比如一些社交、通讯软件 , 以保证消息的及时推送 。然而 , 这些机制对用户和开发人员来说相当于一个黑盒 。人们无法判断哪些应用可以在后台运行 , 哪些不能 , 最终的体验也不尽如人意 。

安卓基于Linux系统 , 具有完善的多后台机制 。它诞生之初 , 桌面级的“真实背景”是玩家津津乐道的卖点 。这几年安卓机的内存越来越大 , 甚至堆到了16G的容量 , 和台式PC相比也不算太多 。但是为什么安卓生态系统中杀后台的现象越来越严重呢?让我们简单谈谈这个问题 。

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

原生安卓系统支持App后台保留流程 , 但传统上也有渐进式后台退出机制 。传统上 , 安卓系统会给App进程分配不同的状态 , 比如前台App、可访问App、二级App、隐藏App、内容提供商、空App等等 。内存不足时 , 系统会优先终止Empty_App进程和服务 , 释放内存;当内存再次紧张时 , 它开始篡改Content_Provider , 以此类推 。

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

然而 , 并不是每个应用程序都诚实地注册了一个合理的进程状态 。很多安卓应用会通过一些手段修改自己进程的属性 , 让自己长时间呆在后台 。

比如一些流氓应用会启动前台注册自己为前台应用 , 让自己的后台成为最高优先级 , 永远不会被系统杀死;再比如 , 一个流氓App会利用安卓的浮动窗口机制 , 设置一个1像素大小的透明浮动窗口 , 这样App总是被激活 , 避免在后台被杀;比如流氓app正在预热 , 后台进程利用安卓的周期性任务进行链式唤醒 。打开一个应用相当于唤醒了N个应用的后台.

流氓应用驻留在后台的经典方法——使用广播接收器来触发后台自启动 。

应用的这些行为消耗了额外的资源 , 对电池寿命和流畅度的负面影响肉眼可见 。

为此 , 官方安卓系统也做出了一些回应 。比如App注册开始前台状态 , 安卓7.0之后 , 通知栏会强制显示“XX在后台运行”;比如安卓收紧了浮动窗口的权限 , 使用浮动窗口时必须打开相应的开关;另一方面 , 安卓11在很大程度上唤醒了应用等之间的链条 。

安卓7.0在通知栏中公开了很多后台运行的应用 , 后来这些应用不得不改变留在后台的方式

然而 , 这条路的高度比魔法高一英尺 。安卓系统的很多限制性后台机制需要更高版本的TargetAPI才能让应用生效 , 而大量的应用仍然使用旧的开发规范 , 但用户无法抛弃其中的很多 。所以App强行驻留后台的行为 , 对用户有实实在在的负面影响 。既然谷歌官方安卓做不到 , 那就只能靠第三方安卓ROM来做了 。——如果安卓的任何一个品牌都做不到 , 就会陷入用户“卡、热、电”的不良口碑 。

所以 , 代工安卓的人在后台杀 , 一个接一个 。在中国 , 一些安卓rom甚至默认杀死后台 。即使内存资源充足 , 大多数应用程序也无法保持后台进程 。安卓ROM从根本上扼杀了背景 , 这就是它产生的原因 。

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

安卓ROM大举杀后台是“果” , App通过各种动作强行驻留后台是“因” 。而这一切的“根源”是什么呢?恐怕和安卓的生态环境有关 。

与苹果不同 , 安卓最初并没有为app提供统一的推送机制 , 这意味着如果每个app需要接收后台消息 , 就需要驻留在自己的进程中 , 随时接收消息推送 。然而 , 谷歌近年来也对此进行了改进 , 引入了GCM/FCM机制 , App可以通过谷歌调用谷歌服务框架GMS

的服务器实现统一的消息转发 , 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们未来能有更好的用户体验吧 。

    推荐阅读