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