當前位置:
首頁 > 天下 > 解決手機卡頓,把內存當硬碟用就夠了?

解決手機卡頓,把內存當硬碟用就夠了?

上次,世超寫了一篇文章,告訴大家一些手機加速工具其實並沒有什麼用……

文章發布之後,收到了不少留言,很多差友和世超吐槽了殺進程的血與淚。

還有一部分差友當場表示要再換個新手機……

這屆差友家裡都有礦嗎???

看來黑市可以考慮賣手機了!!!

不過,在看了一些留言之後,世超發現很多差友都在後台推薦一類叫做「 吃掉內存 」的 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 吧,如果還是覺得卡。。。

那。。。

你買的手機一定是假的!

參考資料

知乎,為什麼安卓不採用墓碑機制?,Cyandev 的回答

統一推送聯盟,《中國綠色 APP 徵集令》

「 要不還是再買個手機吧。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 差評 的精彩文章:

讀完華為拍月亮的專利,我發現了盲點……
車上聞到什麼味道,會讓女孩子想要和你談戀愛?

TAG:差評 |