藍(lán)色
經(jīng)常聽到有朋友抱怨,一晚上手機(jī)待機(jī)耗電超過15%,而且還不知道是什么應(yīng)用在偷跑,就覺得電量嘩嘩地就往下直掉。正常情況下一晚上待機(jī)耗電在2-3%左右,超過這個(gè)值較多的肯定是有問題。
手機(jī)上應(yīng)用程序的耗電,本質(zhì)上是它所啟用的硬件在消耗電量。Android手機(jī)有兩個(gè)處理器,即Application Processor(AP,應(yīng)用處理器)和Baseband Processor(BP,基帶處理器),另外耗電單元還有GPU、LCD、WIFI、GPS、BT等,一般手機(jī)待機(jī)時(shí),AP、LCD、WIFI均進(jìn)入休眠狀態(tài),這時(shí)應(yīng)用程序的代碼也會(huì)停止執(zhí)行,只會(huì)有BP在耗電。
Android為了確保應(yīng)用程序的正確執(zhí)行,提供了Wakelock(喚醒鎖)的API,Wakelock是一種鎖的機(jī)制,只要有應(yīng)用拿著這個(gè)鎖,系統(tǒng)就無(wú)法進(jìn)入休眠,普通的用戶應(yīng)用和系統(tǒng)內(nèi)核都可獲得。Wakelock可以是有超時(shí)或沒超時(shí)的,超時(shí)的鎖在超時(shí)后會(huì)自動(dòng)解鎖(有些流氓應(yīng)用就不斷用超時(shí)鎖然后靠系統(tǒng)自動(dòng)解鎖),當(dāng)沒有鎖了內(nèi)核就會(huì)啟動(dòng)休眠機(jī)制進(jìn)入休眠狀態(tài)。
手機(jī)耗電的問題,其實(shí)大部分是這個(gè)鎖是否正常的問題。
為什么會(huì)有異常耗電?
經(jīng)常聽到有朋友抱怨,一晚上手機(jī)待機(jī)耗電超過15%,而且還不知道是什么應(yīng)用在偷跑,就覺得電量嘩嘩地就往下直掉。正常情況下一晚上待機(jī)耗電在2-3%左右,超過這個(gè)值較多的肯定是有問題,絕大部分問題來(lái)源于以下幾種。
1、霸道的Google服務(wù)
在國(guó)內(nèi),如果你的手機(jī)安裝有Google組件,即便是在賬戶設(shè)置里取消同步,Google服務(wù)還是會(huì)在后臺(tái)同步,如果被墻了,同步就會(huì)拿到鎖,不斷喚醒AP,致使系統(tǒng)完全沒法進(jìn)入休眠狀態(tài),消耗相當(dāng)多的電量。
如果再看到有“耗電最多的是谷歌服務(wù)怎么辦”的問題,你可以把這篇文章推薦給他看看,后面會(huì)有解決方法。
2、頻繁喚醒AP的各類APP
早在2012年,Google就發(fā)布了GCM(Google Cloud Messaging),GCM提供了在應(yīng)用服務(wù)器和Android設(shè)備之間引入代理的能力,以保障兩者之間可伸縮的云通信。使用GCM推送服務(wù)的應(yīng)用即使后臺(tái)程序和服務(wù)都關(guān)閉掉,也依然可以在第一時(shí)間接收到新消息的推送。
但是由于眾所周知的原因,國(guó)內(nèi)行貨Android手機(jī)都閹割了Google服務(wù),也就無(wú)法使用Google的GCM PUSH通道,原本每個(gè)手機(jī)中只需要建立的唯一共享的PUSH通道,也就變成了各自為政。每一個(gè)聲稱為用戶提供實(shí)時(shí)通知的國(guó)內(nèi)APP(如通訊類、天氣日歷類應(yīng)用),為了自身程序在后臺(tái)的正常工作 ,讓用戶能“及時(shí)”接收到推送的消息必然使用自己的推送服務(wù),可能會(huì)頻繁的喚醒AP阻止其進(jìn)入休眠。
手機(jī)QQ2012是曾經(jīng)有名的電老虎
以微信為例,微信Android版是以5分鐘為周期發(fā)送心跳連接,這相當(dāng)于每天發(fā)送近300條短信的消耗,每天手機(jī)會(huì)有300次從待機(jī)省電狀態(tài)被喚醒。而Google的GCM心跳周期為28分鐘,盡可能降低心跳頻率從而節(jié)省耗電。這僅僅是微信,其它相似的應(yīng)用也做著同樣的事情。
其實(shí)微信這樣的消息推送還算正常,上圖中,像QQ、微信、微博的心跳周期差不多都是5分鐘,也就是每小時(shí)喚醒AP 12次左右,但是看看排第一的滴滴打車,每小次居然喚醒次數(shù)高達(dá)33次,心跳周期估計(jì)是100秒,這也就是為什么很多人說(shuō)滴滴打車耗電厲害的原因。另外還有許多Android應(yīng)用獲取消息的方式是輪詢(而非推送),即應(yīng)用主動(dòng)地與服務(wù)器連接并查詢是否有新消息,可想而知它對(duì)系統(tǒng)和網(wǎng)絡(luò)資源的消耗。
在Android系統(tǒng)上,開著十幾個(gè)超時(shí)鎖長(zhǎng)連接的壯觀場(chǎng)面經(jīng)??梢?,大有你流氓我更流氓的意思,手機(jī)的耗電想正常也不可能了。除了Google服務(wù)外,國(guó)內(nèi)各類強(qiáng)占Wakelock的流氓APP也是手機(jī)電池殺手。
3、系統(tǒng)(ROM)優(yōu)化不夠
現(xiàn)在各家手機(jī)都有自己的系統(tǒng),不光是UI風(fēng)格各異,對(duì)Android底層的修改也是隨心所欲,如果修改得不好的甚至?xí)兂伞胺磧?yōu)化”,系統(tǒng)卡頓、耗電增加似乎成為司空見慣的問題。
這里拿聯(lián)想Vibe shot作個(gè)反面例子,同事一直在用這款手機(jī),也一直吐槽手機(jī)耗電問題,簡(jiǎn)單看下它的電量消耗情況,上圖中顯示“聯(lián)想日歷”耗電占了14.9%,同事稱根本沒用過這個(gè)日歷,該應(yīng)用CPU使用時(shí)間近一小時(shí),這還是系統(tǒng)自帶的官方應(yīng)用,讓人情何以堪。再看看微信的情況,更是糟糕,上面說(shuō)過,微信心跳連接周期為5分鐘,也就是說(shuō)在1天6小時(shí)內(nèi)喚醒次數(shù)為360次左右,但是在聯(lián)想Vibe shot,喚醒次數(shù)居然高達(dá)2110次,使得微信的耗電量狂增,不得不說(shuō)聯(lián)想確實(shí)要好好把自己的VibeUI化下。
另外典型的例子就是很多手機(jī)有官方ROM與CM版ROM,很多時(shí)候CM版ROM能提供更加絲滑般的順暢,但是耗電卻不減反增,或許是CM版ROM在驅(qū)動(dòng)方面優(yōu)化不足,關(guān)于這個(gè)問題,我們打算日后再進(jìn)一步探討。
初步解決方法:綠色守護(hù)——誰(shuí)耍流氓干掉誰(shuí)
一般來(lái)說(shuō),如果覺得耗電過快,可先在手機(jī)“設(shè)置-電池”查看具體的耗電情況,對(duì)于一些異常的應(yīng)用耗電可以采取卸載、凍結(jié)的方式來(lái)看看是不是它在作崇,只不過不同的ROM,它顯示的方式并不一樣,像一些系統(tǒng)應(yīng)用都統(tǒng)歸于“Android操作系統(tǒng)”這一項(xiàng)(如Google服務(wù)),所以這個(gè)只能用作參考,只是初步目測(cè)而已。
說(shuō)了這么多,轉(zhuǎn)到重點(diǎn)上來(lái),也就是今天要隆重推薦的耗電殺手級(jí)應(yīng)用——綠色守護(hù)(Greenify)。
綠色守護(hù)作為Android神器,其實(shí)早已聲名遠(yuǎn)播,它主要能對(duì)付那些申請(qǐng)了鎖卻沒有學(xué)會(huì)釋放的應(yīng)用程序,通過獨(dú)特的“綠色化”技術(shù),來(lái)減少電池消耗,目前最新版本為2.70。從2.0版本開始,綠色守護(hù)可以工作在非Root模式,不過這一機(jī)制由于權(quán)限制約,還是沒法實(shí)現(xiàn)自動(dòng)休眠,所以強(qiáng)烈建議手機(jī)獲取Root權(quán)限, 獲取Root權(quán)限其實(shí)也不會(huì)增加什么風(fēng)險(xiǎn),這里要表?yè)P(yáng)下小米和魅族這些直接在ROM中開放了Root權(quán)限的廠商,極大方便了玩家。
點(diǎn)擊右上角的“+”添加需要綠色化的應(yīng)用
綠色守護(hù)使用起來(lái)很簡(jiǎn)單,添加需要綠色化的應(yīng)用即可,這些被添加的應(yīng)用在屏幕關(guān)閉三分鐘后進(jìn)入休眠狀態(tài),從而達(dá)到省電的目的。但是不要綠色化鬧鐘、即時(shí)通訊、啟動(dòng)器類的應(yīng)用,除非你確定不使用它們,而像Google服務(wù)這樣的,也可以選擇無(wú)視狀態(tài)強(qiáng)制讓它進(jìn)入休眠,但不得不說(shuō)即使如此,有時(shí)候Google服務(wù)還是會(huì)在后臺(tái)運(yùn)行。
綠色守護(hù)另外還有功能更強(qiáng)大的捐贈(zèng)版,需要Xposed框架配合使用。
Xposed框架下的綠色守護(hù),功能大大加強(qiáng)
捐贈(zèng)版能綠色化系統(tǒng)應(yīng)用、深度休眠等,而且可以讓GCM推送喚醒綠色化的應(yīng)用(像GCM版微信、淘寶都可以被綠色化),這些支持GCM推送的應(yīng)用在綠色守護(hù)中會(huì)有個(gè)小圖標(biāo)顯示。
只要幾步簡(jiǎn)單的操作,凡是“耍流氓”的應(yīng)用都可以被“干掉”,在熄屏后還不斷喚醒AP的的情況可大大緩解。
進(jìn)階之一:尋找真兇的BetterBatteryStats
綠色守護(hù)是一副良藥,但也不是包治萬(wàn)病,有時(shí)還需要對(duì)癥下藥方能根冶,這就需要我們能找到耗電的真正元兇,并借助一些手機(jī)電池工具APP來(lái)幫忙。目前比較好用的電池分析工具有Wakelock detector和BetterBatteryStats這兩款,前者久未更新,也不支持Android 5.x的系統(tǒng),所以不作推薦,BetterBatteryStats(簡(jiǎn)稱BBS)目前最新版本為2.0,功能強(qiáng)大,操作簡(jiǎn)單,值得一試。
BBS是一款實(shí)用的電池工具,能夠分析你的手機(jī)行為,找到那些造成手機(jī)耗盡電池的應(yīng)用,需要注意的是,在安裝完后選擇作為系統(tǒng)應(yīng)用安裝,然后重啟手機(jī)才能正常運(yùn)行。
BBS能監(jiān)測(cè)的項(xiàng)目
BBS能監(jiān)控多個(gè)項(xiàng)目,如果待機(jī)一段時(shí)間,在“Other”項(xiàng)目中“Deep Sleep(深度睡眠)”沒達(dá)到90%以上,那就要好好考察考察。通??梢灾攸c(diǎn)關(guān)注:“Partial Wakelocks”、“Alarms”、“CPU States”這幾個(gè)項(xiàng)目,而像“Network”能監(jiān)測(cè)到各個(gè)應(yīng)用的流量消耗情況,這樣偷跑流量的應(yīng)用就能很容易被揪出來(lái)。
“Partial Wakelocks”與“CPU States”
Partial Wakelock同樣是鎖的一種,它表示保持AP運(yùn)行但屏幕和鍵盤燈有可能是關(guān)閉的,也就是熄屏后偷偷在運(yùn)行的那種,真兇在這兒往往能現(xiàn)形,像上圖的“Checkin Service”在66分鐘監(jiān)測(cè)時(shí)間內(nèi)運(yùn)行了27分鐘,明顯就是耗電大戶。CPU States能顯示在監(jiān)測(cè)期間手機(jī)CPU工作頻率的分布情況,如果待機(jī)時(shí)“Deep Sleep”占比不高同樣說(shuō)明有應(yīng)用在默默地奉獻(xiàn)。在“Alarms”中可以監(jiān)測(cè)到各個(gè)應(yīng)用的喚醒頻率,這樣也很容易找出那些心跳過快的APP。
BBS能夠比較容易找到不正常耗電的真兇,接下來(lái)的事就是要“處罰”這些真兇——?dú)o(wú)赦或關(guān)進(jìn)牢里。對(duì)于一些普通的無(wú)良應(yīng)用可以直接殺無(wú)赦卸載了事,但像Google組件這樣的進(jìn)程, 有時(shí)卸載并不是個(gè)很好的方法(有些應(yīng)用需要Google服務(wù)支持,這時(shí)卸載并不能適用所有狀況),凍結(jié)也就是把它關(guān)起來(lái)不讓它活動(dòng)是最簡(jiǎn)單的方式。
進(jìn)階之二:凍結(jié)害群之馬
把應(yīng)用凍結(jié)起來(lái)的方法很多,相關(guān)的APP不少,像XX衛(wèi)士什么的都能做到,不過這里推薦使用鈦備份(Titanium Backup),鈦備份是Android手機(jī)玩家必備應(yīng)用之一,除了常規(guī)備份外,它也支持凍結(jié)(解凍)應(yīng)用,目前最新版本為7.2.1。
鈦備份的凍結(jié)功能
在鈦備份中,點(diǎn)擊任何應(yīng)用(包括系統(tǒng)應(yīng)用),都可以彈出一個(gè)功能窗口,包括備份、凍結(jié)和卸載等,被凍結(jié)的應(yīng)用會(huì)有藍(lán)紫色背景顯示,再次點(diǎn)擊它們,可以進(jìn)行解凍。
對(duì)于國(guó)內(nèi)手機(jī)中的Google服務(wù),建議還是凍結(jié)起來(lái)為上策,畢竟綠色守護(hù)有時(shí)也難以控制住它,而需要使用時(shí)再進(jìn)行解凍也并不麻煩。
進(jìn)階之三:借力Android第一神器Xposed框架
玩手機(jī)的朋友,一定會(huì)聽說(shuō)過Xposed Framework,如果稱其為第二神器,恐怕沒人敢說(shuō)自己是第一。Xposed框架是一款可以在不修改APK的情況下影響程序運(yùn)行的框架服務(wù),基于它可以制作出許多功能強(qiáng)大的模塊,且不占用任何資源。Xposed更像一個(gè)平臺(tái),提供了由眾多作者編寫的數(shù)千個(gè)模塊,這些模塊或大或小,主要實(shí)現(xiàn)功能增強(qiáng)、修復(fù)Bug、美化系統(tǒng)等作用。
最新的Xposed 3.0 alpha4版本
目前Xposed能很好地在Android 5.x系統(tǒng)上運(yùn)行,最新版本為Xposed 3.0 alpha4,在Android 5.x系統(tǒng)中安裝時(shí)除了APP外還需要通過Recovery刷入相應(yīng)的框架(并且區(qū)分5.0.x和5.1.x兩個(gè)框架),安裝軟件有一定的門檻,不過對(duì)于玩家來(lái)說(shuō)這都不是個(gè)事。在Android 4.x系統(tǒng)中,最新的版本是Xposed 2.7,直接安裝即可。
有個(gè)問題是,很多手機(jī)自帶ROM(如MIUI、Flyme等)已經(jīng)深度定制化,故對(duì)Xposed的兼容性并不好,有時(shí)可能要選擇一些稍低的版本或特定版本才能正常工作 ,像華為的EMUI只能使用Xposed 2.5.1版本,不過,Xposed版本過低可能會(huì)導(dǎo)致很多功能模塊無(wú)法使用。
在Xposed的下載中提供了數(shù)千個(gè)模塊供免費(fèi)下載(少數(shù)模塊會(huì)有需捐贈(zèng)的高級(jí)版),像前面介紹過的綠色守護(hù)捐贈(zèng)版,它能提供更好的綠化功能,也有Pre APP Hacking這樣的模塊來(lái)防止Wakelock,也有Native Freezer來(lái)凍結(jié)應(yīng)用,基本上你需要的功能在Xposed框架中都可以找到。
小結(jié)
目前無(wú)論是Android手機(jī)還是iPhone,續(xù)航都是個(gè)老大難的問題,既然電池已經(jīng)固定不可更改了,那么內(nèi)部挖潛降低手機(jī)耗電量是唯一出路,國(guó)內(nèi)手機(jī)中,耗電影響比較大的是Google服務(wù),以及那些申請(qǐng)了鎖但又舍不得釋放的應(yīng)用,通過綠色守護(hù)能緩解它們的影響,更激進(jìn)一點(diǎn)的策略就是凍結(jié)或卸載它們,一勞永逸。這些簡(jiǎn)單的操作雖然不會(huì)帶來(lái)翻天覆地的變化,但至少能讓手機(jī)的續(xù)航能力提高一個(gè)檔次,同時(shí)還能獲得自己動(dòng)手玩機(jī)的樂趣,何樂不為呢?!?/p>