|
上圖為2016年6月Google更新的Android系統(tǒng)分布圖,顯示運(yùn)行每個(gè)Android版本的活躍用戶比例,由上圖得知,5.0及以上系統(tǒng)占比正在加大,而4.X占比依然是最多的,所以耗電量分析也要從4.X和5.0級(jí)以上的系統(tǒng)來(lái)研究。 Android應(yīng)用耗電量一直是比較麻煩的,也是大家所關(guān)注的問(wèn)題,在4.4系統(tǒng)之前,google一直沒(méi)有相關(guān)API暴露給外面,所以要研究4.4系統(tǒng)以前的耗電量,就需要研讀Android的源碼;5.0之后的系統(tǒng),就可以使用adb命令直接獲取。 源碼中到底哪個(gè)部分是真正計(jì)算耗電量的呢?首先打開(kāi)Android系統(tǒng)源碼,找到設(shè)置的activity中的電池的部分,也就是”com.android.setting.fuelaguge”這個(gè)包里面的PowerUsageSummary類,該類是篩選耗電量最多的前十個(gè)應(yīng)用,而真正計(jì)算app的耗電量的是BatteryStatsHelper這個(gè)類中的processAppUsage,所以只需要研究processAppUsage這個(gè)類的具體實(shí)現(xiàn)方法就可以解開(kāi)我們的疑惑啦~ 仔細(xì)查看BatteryStatsHelper中的processAppUsage這個(gè)類,就可以看出,每個(gè)app的耗電量主要由以下幾個(gè)方面決定:cpu的耗電量、wakelock的耗電量、wifi的耗電量、移動(dòng)數(shù)據(jù)的耗電量和其他傳感器的耗電量。 如上圖源碼,cpu的耗電量為cpu的運(yùn)行時(shí)間和cpu每秒耗電的乘積(里面值得注意的是CPU的速度分為幾個(gè)檔次,每個(gè)檔次的每秒耗電不同)。 如上圖源碼,wakelock的耗電量為partial wake locks的次數(shù)和每次wakelock的耗電的乘積。WakeLock是一種鎖機(jī)制,只要有人拿著這把所,系統(tǒng)就無(wú)法進(jìn)入休眠階段。其實(shí)android系統(tǒng)有多種類型的wakelock,partialwake lock、screendimwake lock、screenbrightwake lock和fullwake lock四中,四種wakelock的共同的都是保持CPU運(yùn)行,但是屏幕和鍵盤(pán)燈有區(qū)別,這個(gè)源碼中,只計(jì)算了partialwake lock這一種情況,而且只計(jì)算了其中的cpu的影響。 Wifi的耗電量包括三個(gè)部分,一個(gè)是wifi流量、wifi維持耗電量和wifi掃描耗電量,最重要的還是wifi流量耗電量。 4.4的源碼中,移動(dòng)網(wǎng)絡(luò)的耗電量,是根據(jù)移動(dòng)網(wǎng)絡(luò)的上傳和下載的流量之和與每字節(jié)流量的耗電量的乘積。5.0及以后的版本,移動(dòng)網(wǎng)絡(luò)的耗電量是根據(jù)packet個(gè)數(shù)來(lái)計(jì)算耗電量。 傳感器耗電量計(jì)算方式為各種傳感器的單位時(shí)間耗電量(multiplier)和運(yùn)行時(shí)間(sensorTime)的乘積之和。不過(guò)GPS傳感器和其他傳感器的單位耗電量計(jì)算方式不同。 Android5.0后,就可以直接使用adb命令很方便的獲取電量了,具體方法如下:
Per-PID Stats:每個(gè)應(yīng)用的wake timeEstimated Power User:里面包括每個(gè)應(yīng)用的耗電量(上面方法就是獲取該耗電量) 還有All kernel wake locks和All partial wake locks等 也可以通過(guò)該方法獲取競(jìng)品的待機(jī)耗電量和相同操作下的功能耗電量,與自身app進(jìn)行比對(duì)。 由以上分析每個(gè)App的耗電量主要由以下幾個(gè)方面決定:cpu的耗電量、wakelock的耗電量、wifi的耗電量、移動(dòng)數(shù)據(jù)的耗電量和其他傳感器的耗電量,而從dumpsys batterystats中獲取的是App的總耗電量,怎么區(qū)分到底是哪些部分更耗電呢? 介紹2款A(yù)pp,適用條件:手機(jī)需root 一個(gè)是google公司研發(fā)的功耗分析的工具PowerTutor,優(yōu)點(diǎn)是可以在將數(shù)據(jù)在同一環(huán)境下與競(jìng)品的數(shù)據(jù)進(jìn)行比對(duì),可以方便的開(kāi)始記錄,并且可以導(dǎo)出log,log每分鐘記錄一次所有應(yīng)用的功耗,包含了LCD,CPU,GPS,3G等產(chǎn)生功耗,缺點(diǎn)是PowerTutor并不通用,只實(shí)現(xiàn)了3中機(jī)型:G1、G2和Nexus One,其余的機(jī)型都?xì)w為Unknown,數(shù)據(jù)可能不夠精確,如果測(cè)試條件允許的話,還是最好使用支持的機(jī)型,apk直接在應(yīng)用市場(chǎng)中搜索下載。 |
|
|
來(lái)自: 小胖魚(yú)與小松鼠 > 《手機(jī)測(cè)試》