源码

手机卡顿耗电快,难道只能换新机?

上次,写了一篇文章,告诉大家一些手机加速工具其实并没有什么用……

文章发布之后,收到了不少留言,很多差友和世超吐槽了杀进程的血与泪。

还有一部分差友当场表示要再换个新手机……

这届差友家里都有矿吗???

看来黑市可以考虑卖手机了!!!

不过,在看了一些留言之后,世超发现很多差友都在后台推荐一类叫做「 吃掉内存 」的 app。

大概意思就是这个 app 本身会在内存中释放很大一坨数据,把内存吃光,逼着系统的内存管理机制停掉其他正在后台运行的进程,以此加快系统速度。。。

打个比方,一辆公交车满了,人挤人很难受,这时候上来个超级大胖子,把一些人挤下车之后自己再下车,这样车就空出来了嘿。。。

不过世超对这个方案其实是不推荐的,因为在之前那篇文章里也说了,要想真的解决手机卡顿的问题,干掉那些明明已经切到后台,但依旧保持活跃状态的 app 才是关键。

正是那些 app 在手机的后台持续运行,积少成多,消耗了大量的 CPU 资源,才加剧了发热和电量消耗。

但是暴力杀掉全部后台进程,其实是「 杀敌一千,自损八百 」。。。

没错,把后台进程无差别的杀死,就没有 app 在后台消耗 CPU 资源了,道理简单易懂;但全家桶的互相唤醒怎么办,那些本身无害的休眠 app 怎么办:

把内存清干净之后,突然想去蚂蚁森林浇浇水;之后水也浇了,「 阿里动物园 」也重新强势进驻你的手机内存了……

还有一些是已经休眠 app 的进程缓存,即使驻留在内存中也不会耗费电量,难道也需要一并杀死吗?

世超想要告诉大家的是,后台进程本身是无罪的,耗电的真正元凶其实是那些本该休眠,却依旧保持活跃并且占用 CPU 的后台进程!

真假后台的争论

大概从 2015 年左右开始,网上就存在一个论调了:iPhone 的后台是假后台,不如 Android。

一开始的时候,iOS 和 Android 说是两个极端也不为过:

iPhone 最早不允许任何程序在后台运行,按 HOME 键退出就代表进程被销毁;所以一开始的 iPhone 可没法像现在一样,能随时收到微信消息。

iOS 3,苹果引入了通知中心和消息推送服务,QQ 和微信终于能在后台收到信消息了。。。

直到 iOS 4,为了不让打游戏的用户因为回微信消息丢了游戏存档,苹果开始允许 app 在后台驻留。

驻留运行也是有区别的,在 iPhone 上,程序退出后会被系统「 挂起 」,以休眠的形式放到内存里。

就像把 app 关到了冰箱的保鲜室,app 在后台不可以接触 CPU 一类的计算资源,但是取出的时候会和刚放进去的时候一样新鲜。所以爱奇艺退到后台之后就没法继续缓存电视剧了。

后来由于使用场景愈发复杂,iOS 又加入了「 后台自动刷新 」功能,允许被休眠的进程在后台有周期地唤醒;但总的来说还是十分克制。

然而 Android 走了一条完全相反的路,除非 app 自己决定进入休眠状态,不然想怎么在后台运行都可以。

QQ 能在后台收到消息,爱奇艺能在后台缓存视频,百度云能在后台下载……

然后手机就卡死了。

直到 Android 6.0,谷歌才开始对后台应用进入休眠状态提出一些强制要求;到了 Android Q,系统已经能够休眠大多数强行在后台保持活跃的进程了。

所以「 假后台 」只是一知半解的网友们人云亦云之后对被休眠进程的错误理解罢了;这么多年的实践也证明了,只有采取更强硬的后台进程休眠机制,才能更好保证手机上可怜的电池续航。

双刃剑:内存压缩技术

世超前面说了这么多,只是想给后台进程「 正名 」一下,后台进程并不是什么十恶不赦的东西,相反,大多数情况下缓存在后台的进程是个好文明。

毕竟谁也不想视频缓存的时候只能干等着,游戏切出去回个消息再回来存档没了对不对。

但面对后台进程导致的手机卡顿我们又不能视而不见,这个时候我们就得从别的地方找原因了。

比如虚拟内存(内存交换)。。。什么的。

虚拟内存其实就是在硬盘上划出了一片区域,充当「 备用内存 」。

当电脑上的内存不够用的时候,系统就会自动把一部分休眠中的后台进程转移到硬盘上的虚拟内存中,需要使用的时候再挪出来。

这样既使活跃中的重要进程有了足够的内存,已经休眠的进程也逃过了因为内存不足而被强行终结掉的命运。

Android 一开始使用的也是这个方案,不过后来慢慢就不用了……

原因很简单:卡!

即使是 UFS 2.1 的闪存,随机读写速度依旧只有内存的千分之一,换句话说,从闪存恢复已休眠的 app 要比直接从内存中恢复慢一千倍!!

我世超可是一个日理万机的男人,一个虚拟内存就要浪费我几毫秒的时间,这还了得??

还好在 Android 4.4 的时候,谷歌引入了基于 zram 的「 内存压缩 」技术,放弃在硬盘里专门划一片区域作为虚拟内存,转而直接在内存中划这片区域,用来压缩已休眠的后台进程,为正在运行的进程腾出空间。

由于 zram 使用的 lz4 压缩算法主打的就是快,在多核 CPU 上的速度甚至可以接近内存本身的读写速度,解决了虚拟内存向闪存转移数据导致的读写速度瓶颈。

不但能让 4 GB 内存当 8 GB 的来用,还能解决读写速度慢导致的卡顿问题,这简直就是内存不足的终极良药啊!

但是世超曾经说过:万事皆有利弊。就好比内存压缩这个技术吧,它并不是如想当然那般,遇到什么休眠的进程说压缩就压缩。而是需要先在内存里划定一块区域,之后这块区域就只能用来放压缩过的进程的,活跃的进程不能占用

通常情况下手机厂商都会把这个值设定为实际内存大小的 30% 左右,也就是说 6 GB 的内存有 1.8 GB 是只能用来存放压缩过的进程的,实际上只有不足 4.2 GB 的内存是可以直接被 app 使用的。

这个比例设定其实是挺合理的,但是别忘了,世超还说过:就算没有弊病的,也逃不过时间这把杀猪刀。

我们回顾一下过往,在 Android 4.4 发布的 2013 年,谷歌自家旗舰手机 Nexus 5 的内存是 —— 2 GB

两年前发布的千元机红米 5 表示:俺也一样。

于是乎,问题就来了,当年谁能想到,现如今一个支付宝,外加一个微信,1 GB 内存就出去了??

这还不算淘宝 QQ 以及滴滴美团今日头条一类的内存巨兽,都算进去的话差不多又是 1 GB 内存出去了。。。

原本 2 GB 内存的手机,被内存压缩这么一搞,只剩下不足 1.4 GB 的内存可以直接被 app 调用了……

我们是否需要压缩内存

汝之蜜糖,吾之砒霜;内存压缩到底让手机变卡了还是变快了,众说纷纭,手机论坛上争了这么旧,到头来「 发烧友 」们谁也没争过谁。

世超觉得,后台进程是个好文明,内存压缩也是个好文明,甚至虚拟内存也是个好文明;比如 Linux 就推荐在内存小的旧电脑上,同时启用内存压缩和虚拟内存两种技术,在尽量避免遭遇读写瓶颈的情况下保留更多后台进程。

但世超也觉得,在一些性能羸弱的设备上,一些「 好文明 」反而会误事儿:比如在使用机械硬盘的旧电脑上安装 Windows 10;也比如在只有 2 GB 内存的旧手机上启用内存压缩、保留后台进程……

要不要考虑亲自管理进程?

( 以下内容技术高能,且存在一定风险,懒得折腾手机的可以酌情跳过。)

解决频繁启动的后台进程其实不难,世超之前针对原生 Android 也给大家推荐了绿色守护和黑阈两款 app;由于安装之后有非常完善的引导说明,所以世超并未做过多介绍,但却被一些差友给看漏了。。

在未获取 root 权限的手机上世超其实更推荐黑阈,图为绿色守护的启动引导

但内存压缩是由系统内核控制的,因此需要 root 权限才能更改,但世超还是得说清楚一点:

对小白来说,root 存在一定风险,也不要盲目轻信网上的 「 一键 root 工具 」,基本都是在骗人。( 如果你看完还决定 root,后果自负 )

对于那些已经 root 了手机,尤其是使用 Magisk 获取了 root 权限的差友,Magisk 仓库内已经提供了控制内存压缩功能的侧载模块,对已经使用 Magisk 获取了手机 root 权限的差友来说操作起来会简单很多。

Magisk 是一款通过劫持系统启动镜像挂载修改模块的社区工具

对于内存小于 2 GB 的手机来说,世超建议关闭内存压缩和虚拟内存,让系统本身的后台管理机制解决不安分的后台进程。使用 Magisk 模块禁用内存压缩的方法可以参照下方的图例。

而 2 - 8 GB 以上内存的手机,世超其实都不建议对内存压缩的状态进行更改;而 8 GB 以上内存的手机,怎么也得是骁龙 835 以上的 SoC 吧,如果还是觉得卡。。。

那。。。

你买的手机一定是假的!

“ 要不还是再买个手机吧。 ”

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/shoujikadunhaodiankuainandaozhinenghuanxinji.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:8 月 13, 2019 at 09:51 下午

热评文章