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

日期:07-31
AndroidGoogle进程

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

安卓是 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们未来能有更好的用户体验吧。

马斯克抨击苹果应用商店收费为“互联网全球税” TCL华星发力电竞显示器赛道
相关阅读: