当前位置: 首页 > 科技观察

谷歌受不了了!安卓内存大,为什么还是杀后台

时间:2023-03-19 15:54:11 科技观察

安卓是谷歌首创的,现在安卓的一些行为,连谷歌都看不下去了。近日,Android针对Android开展了一项调查——谷歌认为,很多OEM安卓手机厂商的Android系统存在严重的后台查杀问题,Apps很难在后台存活。谷歌最近与一些Android制造商发生了争执。谷歌认为,如今许多OEMAndroid系统都违反了谷歌的政策,阻止应用程序在后台持续运行。虽然大部分安卓应用不需要在后台保持进程,但有些品类确实有这样的需求,比如健康记录类应用,需要持续记录数据。然而,一些OEMAndroid系统不能满足这样的要求。Android开源项目AOSP的bugtracker发现,部分OEM厂商滥用Android机制,禁止第三方应用在后台运行,甚至杀死AccessibilityService系统级。无障碍服务流程。谷歌其实已经为Android系统制定了后台查杀规则,但OEM厂商在这方面并不透明。开发者和用户无法知道OEMAndroid会杀掉什么样的App后台。有时,OEMAndroid厂商会将某些应用程序加入白名单,例如一些社交和通信软件,以保证消息的及时推送。然而,这些机制对于用户和开发者来说相当于黑盒。人们无法判断哪些应用程序可以在后台运行,哪些不能。最后的体验并不尽如人意。Android基于Linux系统,拥有完备的多后台机制。在它诞生之初,其桌面级的“真实背景”是玩家津津乐道的卖点。近年来,安卓手机的内存越来越大,甚至达到了16G的容量,与台式机差不了多少。但是为什么在Android生态中,后台杀的现象越来越严重呢?简单说说这个问题。为什么Android系统会主动杀后台?Android原生系统支持App后台保留进程,但传统上也有后台渐进退出机制。传统上,Android系统会为App进程分配不同的状态,如Foreground_App(前台应用)、Visiable_App(可见应用)、Secondary_App(二级应用)、Hidden_??App(隐藏应用)、Content_Provider(内容提供者)、Empty_App(空应用)和其他州。当内存不足时,系统会先终止Empty_App进程和服务,释放内存;如果内存再次紧张,它会开始操作Content_Provider,依此类推。系统会根据Android应用的状态,判断杀死进程的优先级。但是,并非每个应用程序都会诚实地为该过程注册一个合理的状态。很多Android应用通过一些手段修改自身进程的属性,从而在后台长时间停留。例如,一些流氓应用通过startForeground将自己注册为前台应用,使其后台成为最高优先级,永远不会被系统杀死;例如,一些流氓应用会利用Android的浮窗机制,设置1个像素大小的透明浮窗,使App始终处于活动状态,避免在后台被杀;再比如,流氓App聚集在一起取暖,后台进程利用Android系统的周期性任务进行链式唤醒。打开一个App,相当于唤醒了N个App的后台……流氓App在后台停留的经典手法——利用广播接收器来触发后台自启动App的这些行为,消耗额外的资源,有明显的负面影响影响电池寿命和平滑度。为此,安卓系统官方也做出了一些回应。例如,对于app随机注册startForeground状态,Android7.0之后,会强制在通知栏显示“XX正在后台运行”;又如Android收紧了悬浮窗的权限,必须打开相应的开关才能使用悬浮窗;而Android11主要是应用之间的链式唤醒等等。在Android7.0中,很多后台运行的应用都是在通知栏中公布的。后来,这些App不得不改变了后台停留的方式,但是路在何方,魔在何方。Android系统后台机制的很多限制需要应用使用更高版本的TargetAPI才能生效,大量的应用仍然使用旧的开发规范,但用户放弃其中的很多是不可能的。因此,强制App驻留在后台的行为,对用户的负面影响是实实在在的。由于谷歌官方的Android做不到,只能通过第三方AndroidROM来做——如果哪个品牌的Android不做,就会在用户中留下“卡、热、耗电”的坏名声”。所以,代工的安卓们都在杀后台,一个接一个更狠。特别是在国内,一些安卓ROM甚至默认定时杀后台。即使RAM资源足够,大多数应用程序也无法保留后台进程。AndroidROM大杀后台的风潮由此诞生。为什么应用程序会被强制留在后台?AndroidROM对后台的强杀是“果”,App以各种方式强制留在后台是“因”。而这一切的“根源”是什么?恐怕与Android的生态环境有关。与Apple不同,Android最初并没有提供统一的App推送机制,这意味着如果每个App都需要接收后台消息,则需要驻留在自己的进程中随时接收消息推送。不过谷歌这些年也对此进行了改进,引入了GCM/FCM机制。应用可以调用谷歌服务框架GMS,通过谷歌的服务器实现消息的统一转发。App的消息推送可以由系统接管,App无需保留后台,体验类似iOS。Android上的FCM机制类似于iOS的消息统一推送,但前提是系统和App接入了谷歌服务。但是,这套机制并不是强制性的。如果App没有接入GMS,甚至没有上架GooglePlay,那么你完全可以无视这一切。在国内典型的应用环境中,GMS其实是不可用的,App驻留在进程中接收消息推送成为必须。因此,国内的Android应用使用了很多手段将进程驻留在Android系统中。这其实很大程度上是不得已而为之,当然也有商业上的考虑。鉴于国产App的后台停留手段多种多样,国产AndroidROM为了保证续航和流畅性,不得不采用更多的一刀切的杀后台手段,才造成了现在的局面。为什么Google清理AndroidROM会杀掉后台?AndroidROM清理App后台,带来更好的续航和性能。然而,对于用户来说,这并不是全部体验。很多用户都遇到过这样的情况——用一个app,比如音乐app听歌,切到后台一会,音乐就停止了,因为系统杀掉了音乐app进程。但是用户并不知道这是系统干的,他们只会认为这是音乐app的错。有一段时间,这款音乐应用收到了差评。谷歌在PlayStore观察到很多这样的差评,这显然不是开发者的错——在App常驻后台越来越流行的趋势下,App的后台更容易老老实实按照规范开发。被系统强行打断,反映在用户的实际体验中,app在后台消失,用户感觉app肯定有bug。为了呼吁系统不要乱杀应用后台,开发者还无缘无故专门做了一个“请不要杀我的应用”应用开发者,这个问题显然不是开发者能解决的.谷歌不得不亲自介入,对AndroidROM杀后台的现象进行了整改。目前,谷歌正在邀请第三方应用开??发者提供反馈,想知道哪些手机品牌和型号严重杀后台,以便进行更深入的调查。安卓厂商该如何应对?由于众所周知的原因,谷歌在中国不提供账号相关服务,国内安卓生态与谷歌脱节。因此,谷歌的相关整改对国产安卓产品影响应该不大。不过,国内也有不少安卓厂商开展海外业务。在海外市场,谷歌的话语权非常重要。谷歌可能会向安卓厂商施压,要求其改变系统的后台查杀策略。在此背景下,国内外模式有必要采取不同的反后台策略。在针对国外机型的国际版ROM中,安卓厂商要注意谷歌的意见,一定程度上修改后台查杀策略。但是,我们也必须认识到,AndroidROM后台强杀带来的负面体验在国内同样存在。但是,目前国内安卓生态倒逼安卓厂商做出不好的决定。如何改变现状?统一推送联盟有望从根本上解决系统杀后台和App需要后台维护推送服务的矛盾。近两年,工信部携手主流安卓厂商,共同推进统一推送联盟。APP接入相关系统后,可实现系统级推送,无需驻留在后台即可接收消息。统一推送服务需要AndroidROM和App同时支持。好消息是,统一推送服务已经覆盖华为、OPPO、vivo、小米等众多国产品牌。在“中国移动服务平台”(ChinaMobileService,CMS)的相关系统中,将在2021中国互联网大会上正式发布。希望统一推送联盟能够改变国内APP后台驻留的趋势,让AndroidROM没有理由强势杀后台。总结总的来说,AndroidROM之所以如此激进的杀后台,与AndroidApp的行为密切相关,而这一切的根源在于Android生态系统缺乏统一的推送服务。随着谷歌在国外加强对Android的管控,以及国内统一推送服务的普及,这种情况有望发生改变。我希望AndroidROM和App将来有更好的用户体验。