關(guān)于應(yīng)用耗電量分析和優(yōu)化(一)

統(tǒng)計(jì)設(shè)備耗電數(shù)據(jù):Battery Historian工具(https://github.com/google/battery-historian

Battery Historian是一種在設(shè)備上電池時(shí)檢查Android設(shè)備(Android 5.0 Lollipop及更高版本:API Level 21+)上的電池相關(guān)信息和事件的工具芍殖。它允許應(yīng)用程序開發(fā)人員在時(shí)間線上可視化系統(tǒng)和應(yīng)用程序級事件芬萍,并輕松查看自設(shè)備上次完全收費(fèi)以來的各種聚合統(tǒng)計(jì)信息。

一. 使用Docker

  • 如果是使用Mac或Linux平臺(tái)的話笋籽,推薦直接通過docker運(yùn)行Battery Historian來完成拐袜;
docker -- run -p <port>:9999 gcr.io/android-battery-historian:2.1 --port 9999

之后在瀏覽器中輸入 http://localhost: 就可以查看檩咱,然后上傳bugreport文件進(jìn)行分析了次员。

  • 如果是使用Windows平臺(tái)的話蔗候,也可以使用docker檀训,但是機(jī)子要在BIOS中開啟虛擬化(推薦使用源碼編譯)柑潦;

二. 源代碼構(gòu)建(源碼編譯)

1. battery-historian的安裝
  • 首先下載配置Java環(huán)境 (要配置PATH);
  • 接著下載配置Git環(huán)境 (要配置PATH)峻凫;
配置環(huán)境變量
GIT:D:\prgram\Git\bin
PATH:D:\program\Git\bin
檢查git安裝情況
cmd中輸入git version
  • 接著下載配置Python 2.7環(huán)境 (要配置PATH渗鬼,不能是3.7版本);
配置環(huán)境變量
PATH:D:\program\python2.7.12
檢查python安裝情況
cmd中輸入python可以進(jìn)入python環(huán)境
  • 接著下載配置Go環(huán)境 (要配置PATH和GOPATH以及GOBIN)荧琼;
新建Go項(xiàng)目路徑:GoProject
配置環(huán)境變量
GOBIN:D:\program\Go\bin
GOPATH:D:\program\Go\GoProject
GOROOT: D:\program\Go
PATH:%GOBIN%;%GOPATH%
檢查Go語言安裝情況
cmd中輸入go version譬胎,查看是否安裝成功;

注意:Battery Historian是Go語言的命锄,安裝Go的時(shí)候需要配置其bin的環(huán)境變量堰乔。
Python環(huán)境需要是2.7的(3.x不行), 建議使用pyenv管理本地的python環(huán)境累舷。
另外浩考,因?yàn)锽attery Historian是一個(gè)網(wǎng)頁版工具,,涉及一些JS引用被盈,有時(shí)需要翻墻析孽。

  • 前面的配置其實(shí)很快就能完成,接下來就是下載Battery Historian的源碼來進(jìn)行編譯了;
    $ go get -d -u github.com/google/battery-historian/…

下載完成之后只怎,代碼會(huì)下載到配置的GOPATH中袜瞬,可以去檢查下;

    $ cd $GOPATH/src/github.com/google/battery-historian

切換到那個(gè)目錄,然后執(zhí)行setup.go開始編譯源碼;

   go run setup.go

如果下載不成功別擔(dān)心身堡,可手動(dòng)下載closure-library邓尤、closure-compilerflot-axislabels,解壓放到GOROOT目錄下third_party文件夾下方的closure-compiler汞扎、closure-library季稳、flot-axislabels文件夾( ../battery-historian\third_party),如果沒有均手動(dòng)創(chuàng)建澈魄。

注意:這一步編譯命令若是沒成功景鼠,需要注意:C:\Users\Administrator\src\github.com\google\battery-historian\compiled,文件夾下的文件有沒有成功下載:historian-optimized.js (不可少)

上面的步驟都完成之后就可以啟動(dòng) Battery Historian了痹扇,默認(rèn)端口是9999(注意還是在剛剛目錄下執(zhí)行)铛漓。

$ cd $GOPATH/src/github.com/google/battery-historian
$ go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

待控制臺(tái)輸出listening on port:9999的時(shí)候,可以打開瀏覽器輸入 http://localhost:9999 就可以看到鲫构。

2. battery-historian的使用:

Android 5.0及以上的設(shè)備, 允許我們通過adb命令dump出電量使用統(tǒng)計(jì)信息浓恶。

  1. 因?yàn)殡娏拷y(tǒng)計(jì)數(shù)據(jù)是持續(xù)的,會(huì)非常大结笨, 統(tǒng)計(jì)我們的待測試 App 之前先 reset 下包晰, 連上設(shè)備,命令行執(zhí)行:
初始化android電池電量數(shù)據(jù)
$ adb shell dumpsys batterystats --enable full-wake-history

$ adb shell dumpsys batterystats --reset
Battery stats reset.
  1. 斷開測試設(shè)備, 操作我們的待測試App禀梳;
  2. 重新連接設(shè)備, 使用adb命令導(dǎo)出相關(guān)統(tǒng)計(jì)數(shù)據(jù):
$ adb shell dumpsys batterystats > xxx.txt  //得到整個(gè)設(shè)備的電量消耗信息
$ adb shell dumpsys batterystats > com.package.name > xxx.txt //得到指定app相關(guān)的電量消耗信息
或
// 此命令持續(xù)記錄輸出, 想要停止記錄時(shí)按Ctrl+C退出杜窄。( Android 6.0及以下版本請使用該導(dǎo)出命令)
$ adb bugreport > bugreport.txt
或
// 將bugreport的信息保存到.zip文件中(Android 7.0及以上版本請使用該導(dǎo)出命令)
$ adb bugreport bugreport.zip

// 通過 historian 圖形化展示結(jié)果
python historian.py -a bugreport.txt > battery.html

獲取到bugreport文件之后肠骆,將其上傳到Battery Historian上進(jìn)行分析(http://localhost:9999)算途,下面是它的輸出結(jié)果打開(圖形化展示電池的消耗情況)。

在頁面的下方我們可以查看這段時(shí)間內(nèi)系統(tǒng)的狀態(tài)system stats蚀腿,也可以選擇某個(gè)應(yīng)用查看應(yīng)用的狀態(tài)app stats:

分析圖表.png

其中我們可以看到 Device estimated power use 中顯示了估算的應(yīng)用耗電量值為0.14%嘴瓤。

3. 報(bào)表中各參數(shù)的意義

重要的參數(shù):WiFi、wake_lock莉钙、conn廓脆、mobile_ratio(蜂窩信號)

  • battery_level
    電量,可以看出電量的變化磁玉。比如圖中的數(shù)據(jù)顯示剛開始電量是100%停忿,然后在第11秒-12秒中間的某個(gè)時(shí)刻降到了99%。


  • plugged
    充電狀態(tài)蚊伞,這一欄顯示是否進(jìn)行了充電席赂,以及充電的時(shí)間范圍。例如上圖反映了我們在第22s插入了數(shù)據(jù)線时迫,然后一直持續(xù)了數(shù)據(jù)采集結(jié)束颅停。

  • screen
    屏幕是否點(diǎn)亮,這一點(diǎn)可以考慮到睡眠狀態(tài)和點(diǎn)亮狀態(tài)下電量的使用信息掠拳。

  • top
    該欄顯示當(dāng)前時(shí)刻哪個(gè)app處于最上層癞揉,就是當(dāng)前手機(jī)運(yùn)行的app,用來判斷某個(gè)app對手機(jī)電量的影響,這樣也能判斷出該app的耗電量信息喊熟。該欄記錄了應(yīng)用在某一個(gè)時(shí)刻啟動(dòng)柏肪,以及運(yùn)行的時(shí)間,這對我們比對不同應(yīng)用對性能的影響有很大的幫助芥牌。

  • wake_lock*
    wake_lock 該屬性是記錄wake_lock模塊的工作時(shí)間预吆。是否有停止的時(shí)候等。

  • running
    界面的狀態(tài)胳泉,主要判斷是否處于idle的狀態(tài)拐叉。用來判斷無操作狀態(tài)下電量的消耗。

  • wake_lock_in*
    wake_lock有不同的組件扇商,這個(gè)地方記錄在某一個(gè)時(shí)刻凤瘦,有哪些部件開始工作,以及工作的時(shí)間案铺。

  • Sync
    是否跟后臺(tái)同步蔬芥。
    可以把鼠標(biāo)停在某一項(xiàng)上面】睾海可以看到何時(shí)sync同步 啟動(dòng)的笔诵,持續(xù)時(shí)間Duration多久。電池容量不會(huì)顯示單一行為消耗的具體電量姑子,這里只能顯示使用電池的頻率和時(shí)長乎婿,你可以看分時(shí)段的剩余電量來了解具體消耗了多少電量。

  • APP selection
    可查看某個(gè)應(yīng)用的數(shù)據(jù)街佑,如UID谢翎、CPU使用情況、相機(jī)調(diào)起次數(shù)等沐旨。

4. bugreport相關(guān)推薦

關(guān)于bugreport相關(guān)的知識推薦閱讀Android adb bugreport工具分析和使用這篇文章森逮,作者簡單地從源碼角度分析了adb bugreport命令的運(yùn)行原理,結(jié)論是bugreport其實(shí)是啟動(dòng)了dumpstate service來輸出數(shù)據(jù)磁携,其中數(shù)據(jù)來源包括:
1.系統(tǒng)屬性
2./proc和/sys節(jié)點(diǎn)文件
3.執(zhí)行shell命令獲得相關(guān)輸出
4.logcat輸出
5.Android Framework Services信息基本使用dumpsys命令通過binder調(diào)用服務(wù)中的dump函數(shù)獲得信息

下面是其他的幾篇關(guān)于battery-historian使用的文章可供參考:
(1) Android性能專項(xiàng)測試之battery-historian使用
(2) Android性能專項(xiàng)測試之Batterystats
(3) Battery Historian 2.0 for windows環(huán)境搭建
(4) Android應(yīng)用耗電量分析與優(yōu)化建議
(5)使用Battery Historian分析電源使用情況

5. 關(guān)于電量方面的Android性能優(yōu)化

電量方面的性能優(yōu)化可以參考:
性能優(yōu)化典范中的Android性能優(yōu)化之電量篇
Android App 優(yōu)化之持久電量
Android性能優(yōu)化-電量優(yōu)化
Android后臺(tái)調(diào)度任務(wù)與省電

(1)為了減少電量的消耗褒侧,在蜂窩移動(dòng)網(wǎng)絡(luò)下,最好做到批量執(zhí)行網(wǎng)絡(luò)請求谊迄,盡量避免頻繁的間隔網(wǎng)絡(luò)請求
(2)使用Job Scheduler闷供,應(yīng)用需要做的事情就是判斷哪些任務(wù)是不緊急的,可以交給Job Scheduler來處理鳞上,Job Scheduler集中處理收到的任務(wù)这吻,選擇合適的時(shí)間,合適的網(wǎng)絡(luò)篙议,再一起執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唾糯,一起剝皮案震驚了整個(gè)濱河市怠硼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌移怯,老刑警劉巖香璃,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舟误,居然都是意外死亡葡秒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門嵌溢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眯牧,“玉大人,你說我怎么就攤上這事赖草⊙伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵秧骑,是天一觀的道長版确。 經(jīng)常有香客問我,道長乎折,這世上最難降的妖魔是什么绒疗? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮骂澄,結(jié)果婚禮上吓蘑,老公的妹妹穿的比我還像新娘。我一直安慰自己酗洒,他們只是感情好士修,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樱衷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酒唉。 梳的紋絲不亂的頭發(fā)上矩桂,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音痪伦,去河邊找鬼侄榴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛网沾,可吹牛的內(nèi)容都是我干的癞蚕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辉哥,長吁一口氣:“原來是場噩夢啊……” “哼桦山!你這毒婦竟也來了攒射?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恒水,失蹤者是張志新(化名)和其女友劉穎会放,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钉凌,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咧最,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了御雕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矢沿。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖酸纲,靈堂內(nèi)的尸體忽然破棺而出咨察,到底是詐尸還是另有隱情,我是刑警寧澤福青,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布摄狱,位于F島的核電站,受9級特大地震影響无午,放射性物質(zhì)發(fā)生泄漏媒役。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一宪迟、第九天 我趴在偏房一處隱蔽的房頂上張望酣衷。 院中可真熱鬧,春花似錦次泽、人聲如沸穿仪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啊片。三九已至,卻和暖如春玖像,著一層夾襖步出監(jiān)牢的瞬間紫谷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工捐寥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笤昨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓握恳,卻偏偏與公主長得像瞒窒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子乡洼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 隨著Mobile App應(yīng)用的不斷演進(jìn)崇裁,我們已經(jīng)不能滿足于僅僅實(shí)現(xiàn)功能匕坯,同時(shí)還要追求更高的質(zhì)量和性能,因此耗電量寇壳、...
    sunnyaxin閱讀 10,057評論 1 4
  • 晚夏短句集 -晚間樓下草叢堆 一陣陣鑼鼓喧天的蟲鳴蛙聲 要趕走路人和夏夜似的 -給我的自由已太多 溢出來的 一天天...
    koko0閱讀 434評論 0 1
  • 周末聽老陳說醒颖,他要把飯店關(guān)了去西北溜達(dá)一圈,我調(diào)侃他有一顆放蕩不羈的內(nèi)心壳炎。 對老陳泞歉,我的感情是挺復(fù)雜的。佩服 惋惜...
    愛吃栗子的南門琦巧閱讀 386評論 0 0
  • 我要孝順?gòu)寢?可是不知道怎么去孝順?gòu)寢?只是覺得給她錢 滿足她的要求 聽她的話就可以了 可我知道那不是愛 和媽媽的...
    竺子閱讀 458評論 0 0
  • 首先把 cell xib中的控件 autolayout設(shè)置好后匿辩,保證xcode看起來沒有錯(cuò)誤腰耙。小白的我以為這樣就沒...
    談漁樵耕讀閱讀 2,194評論 0 1