
不知不觉间 Android 陷入了一个关于「后台」的怪圈:一边各大厂商连续推出了 12G RAM 的手机,另一边你刚刚放到后台的下载使命没有如预期那样后台挂机下载,翻开微信发现还得陪发动画面的孤单小人共赏蓝色星球,依照教程辛辛苦苦做了半个小时的 Tasker 规矩、却没有依照方案主动履行……
所以一个耳熟能详的语句开端在咱们脑海中成型——我的后台又被「杀」了。
▍运用开发者的「控诉」
假如你第二天早上醒来发现睡觉追寻运用里的记载数据「一望无际」,并不是因为你「睡得死」,而是睡觉追寻运用根本就没有正常作业。
遇到上述问题的人不止你一个,许多人挑选向这些运用的开发者反应问题,殊不知问题其实不在运用本身。
Android 渠道出名睡觉追寻运用Sleep as Android的开发团队Urbandroid Team不胜其扰,干脆上线了一个名为「别『杀』我运用」的网站,锋芒直指手机厂商糟糕的后台办理机制。
Don't kill my app! 网站对 OEM 体系的评分
以三星为例,Urbandroid Team 称,三星的部分机型在升级到依据 Android 9 的 One UI 后「杀后台」现象变得尤为严峻,自适应电池(Adaptive Battery)机制比较原生 Android 变得尤为急进,3 天内没有发动过的运用乃至无法从后台再次发动。最为糟糕的状况是,假如你装置了一个能够主动越过周末的第三方闹钟,那这个闹钟运用很有或许不会像体系闹钟那样鄙人周一早上按时响起……
正如「别『杀』我运用」网站上控诉的那样,具有相似机制的还包含华为、一加、小米、华硕等等手机厂商的定制版 Android 体系,它们办理后台的办法迥然不同,但都秉承着 iOS 上那一套「划掉就杀掉」的准则——当咱们把某款运用的使命卡片从多使命界面划去,它们也就彻底从手机后台中抹除掉了。
这儿你或许会问许多问题:
Android 运转内存越来越富余,为什么会有如此严峻的「杀后台」现象?
原生 Android 也选用了一套相似的卡片多使命交互办法,有什么区别?
Android 终究需不需求凭借「一键整理」这样的办法来开释运转内存?
咱们得从一些根底的原理说起。
▍Android 的内存收回机制
在官方文档中,Google 将「不受运用本身直接操控的运用进程生命周期」描绘为 Android 最为根底也最为一起的中心特性,这儿咱们无妨将「运用进程生命周期」暂时理解为文章最初和榜首部分所说的「后台」或「后台进程(process)」。
所以 Android 运用的后台进程去留本应是由 Android 体系来决议的。
当可用运转内存空间缺乏时,Android 体系会自行决议对特定运用后台进程占用的空间进行收回开释,这个过程中 Android 挥舞着的那把大刀,叫做 LMK(Low Memory Killer)。那 LMK 又是怎么判别哪些运用能够被「杀」掉、哪些运用又该暂时放过的呢?
每个运用都有各式各样的组成部分,其间特定组件的运转状况一起组成了一套供 LMK 进行内存收回的「优先级」参阅,包含:前台进程、可见进程、服务进程和缓存进程。
一款运用一般会包含的进程类型
前台进程、可见进程和服务进程往往与咱们正在手机上履行的操作直接或直接相关,比方正在前台供咱们交互和操作的活动窗口(Activity)、正在经过播送接收器(BroadcastReceiver)等候触发的 Tasker 规矩、正在后台经过 Wi-Fi 网络主动上传备份相片的 Google Photos 以及前面说到的有待触发的闹钟等等。这些进程优先级从高到低顺次递减,LMK 一般不会触及。
缓存进程则是那些暂时放在运转内存中的部分,也是和本文讨论论题首要相关的要点。
在一个正常运转的(Android)操作体系中,缓存进程应是内存办理机制仅有需求交互的部分:一个运转杰出的 Android 体系一般会在运转内存中暂存多个缓存进程以随时调用,进步运用间的切换功率,一起对那些较为老旧的不活泼进程进行有方案的收回。
只需在极点状况下,比方 Android 体系在收回掉一切缓存进程后发现闲暇内存仍然不够用(比方在低内存的「老爷机」上运转《崩坏 3》),这时 LMK 才会依据优先级继续对服务进程、可见进程和前台进程采纳收回战略。而当这些咱们在正常运用中能够直观感受到的进程都不得不被被收回时,文章最初说到的微信重载、音乐中止、下载消失等等现象也就呈现了。
▍谁动了你的后台
在可用内存富余的状况下遭受「杀后台」现象,一方面或许是 LMK 这把「大刀」出了问题(常见于 Android 9 时期的 Pixel 3 用户),另一方面则有或许是其它规矩额定干涉了 Android 体系正常的内存收回机制。
这儿说到的「其它规矩」首要有两种办法,一种相似部分华为设备上预装的「省电精灵」,它会将一切没有参加后台白名单中的运用后台通通铲除,另一种则依托于 Google 推出的后台查看、后台约束和自适应电池等功用进行「魔改」,让这些功用的实际作用远超预期,乃至到达意料之外的负面作用。
依据 Don't kill my app! 的计算,第二种后台干涉机制在三星、一加和前期的诺基亚机型中常见,这儿厂商们一般会用到一种相似「白名单」的办法来进行过滤。
One UI 的后台办理
部分搭载氢 OS 的一加机型则将上面说到的运用进程进行拆分,除了依据原生 Android 的后台约束、电池优化,还有一套名为「自发动办理」的设置来对运用的自发动进行办理以及一套名为「深度优化」的电池优化机制,后者会形成许多智能手表、手环设备在一段时间后丢掉与手机的蓝牙衔接,终究导致睡觉追寻、运动记载等等功用的失效。
氢 OS 的自发动办理
问题在于上述功用埋藏较深,一般用户在装置运用后往往不会榜首时间前往设置,一加的氢 OS 更是以体系更新之后主动重置部分用户设置出名,那些需求在后台正常作业的运用,因而也被都被直接扔进了原生 Android 中用来约束「毒瘤」运用的「黑箱」里。
换句话说,国内大部分定制 ROM 在后台办理这件工作上都挑选选用一种「宁肯错杀一千不愿放过一个」的做法。
▍多使命办理仍是后台办理?
从某种程度上来说,国产手机厂商在 Android 后台办理上的做法尽管过火,但它们都是国内特别生态下的产品 。
一方面,尽管 Google 为 Android 设想了一套十分抱负化的运用运转与后台办理机制,但大多数于原生 Android 中卓有成效的后台办理机制在国内好像都会变成「鸡肋」。
假如 Google 有 100 种提高 Android 运用运转功率,保证后台绿色、纯洁的办法,国内毒瘤运用开发商就有 101 种绕过这些约束的办法。
凭借共用的第三方推送服务完成链式唤醒、凭借通明的悬浮窗保证后台存活、经过不断获取定位的办法来防止进程被体系收回……不管是出于完成音讯推送这样单纯的目的仍是为了不断唤醒用户设备以完成 KPI 方针这种下作的行为,在国内 Android 生态中均有呈现。
绿色看护专门针对链式唤醒推出的唤醒追寻功用
尽管国内外的详细环境有所不同,但这类规划不标准的 Android 运用带来的问题却是相同的,这类运用放在后台不只不会为咱们带来便当,反而还会因为频频唤醒设备带来不小的耗电问题。待机续航问题作为悬在国产 Android 机头顶的几把白之一,手机厂商不得不各自从体系层面推出自家的应对机制——这就有了上面说到的各种过火式的后台办理办法。
另一方面,这儿还涉及到一个十分重要的概念区别:多使命办理和后台办理终究是不是一回事?
国内 Android 生态因为前期受 iOS 影响较深,无论是开发商仍是用户都更倾向于把「将运用卡片从多使命列表里划掉」的行为理解为铲除对运用的后台进程。在上面说到的特别生态环境的影响之下,这儿被铲除的后台进程往往又包含那些用于保证运用后台运转的可见进程、服务进程乃至前台进程在内。
iOS 的使命办理办法 | 图:Javi Pérez
在酷安运用商场,乃至还有得以在原生 Android 上完成相似「划掉卡片即中止运转」作用的运用,iOS 的后台办理理念在国内有多么家喻户晓可见一斑。
但这种后台办理理念却与 Google 对 Android 的多使命办理规划办法相悖。Google 一直以来都将 Android 手机上呼出使命卡片的那个界面叫做 Recents,最近几个版别的 Android 体系更是将其本地化为「概览」。结合 Google 在 Android 9 和 Android 10 手势交互上的革新,重视多使命办理而非后台办理的目的也越发显着。
当最近运转的运用以一张张卡片的办法呈现在咱们面前时,Google 想要呈现的是一个能够让咱们在不同使命间快速切换的多使命交互,而在抱负状况下,后台办理则是交由体系处理、彻底不该被用户感知的。
至于怎么理性看待 Android 渠道的后台办理,这儿咱们无妨借用绿色看护开发者 @OasisFeng 在「Android 多使命界面的划除交互」这个论题上的答疑来答复这个问题:
Android 从 8.0 开端大幅度调整了运用的后台操控战略……准则上,只需适配了 Android 8+ 的运用,就不能再继续在后台占有内存……至于耗电,这是一个需求平衡的取舍,你假如确实需求某个运用的后台机制,那就得让它稍微耗一点电(不能既要马儿跑得快,又让马儿不吃草吧)。假如你压根不需求它的后台机制,或许它的后台耗电过分分了,那么你能够在运用设置中约束运用的后台才能(非原生体系或许纷歧定有这个选项)。总归,你并不需求「杀运用」,也没必要为这些破事儿操碎心。
这种重视多使命办理、将后台办理主动权交还给体系的理念,跟着本月初 Android 10 的正式放出还将得到进一步强化——Google 将不再答应预装 Android 10 的手机经过铲除多使命卡片的办法来停止后台进程,这个要求相同也被参加了 Google 的 CTS 认证流程。
换句话说,往后绝大部分需求在海外商场搭载 Google 服务上市的手机都必须满意这个要求。
▍小结
就在上星期三(9 月 25 日),酝酿已久的安卓一致推送联盟正式宣告收到华为、OPPO、一加和 realme 四家公司的进展承认,尽管 Google 的缺席也让国内 Android 生态也变得反常杂乱,但国内 Android 设备也能用上的一致推送服务也算是总算迈出了具有实际意义的榜首步。
仅仅间隔改变人们对 Android「杀后台」这件事的观点仍然还有很长的路要走。事实上,国内早在四五年前就呈现过一次对「Android 需不需求『杀后台』」问题的科普,但收效甚微,顺从 iOS 规划风格和交互逻辑国内 Android 厂商要负很大一部分职责。
期望靠谱、省电的一致推送体系能成为改观的榜首步,也期望 @OasisFeng 口中那个乃至能够跨过设备重启康复「后台状况」的抱负化生态提前到来——至于当下,咱们仍然只能见招拆招,遇到运用无法正常履行后台使命时翻开手机设置细心翻找、设置,把它们扔进白名单或是给它们的后台卡片套个「锁」……
下载、装置了一款非白名单运用,该怎么保证它不被「杀后台」呢?欢迎在谈论区把你的设置办法共享给我们。









