首先,咱們須要將Battery Historian工具在本地跑起來,要跑起來能夠選擇使用docker,也能夠選擇編譯源碼。html
(1)若是是使用Mac或Linux平臺的話,推薦直接經過docker運行Battery Historian來完成linux
docker run -d -p 9999:9999 bhaavan/battery-historian
以後在瀏覽器中輸入 http://localhost:9999 就能夠看到效果,而後上傳bugreport文件進行分析了。android
上面的步驟都完成以後就能夠啓動Battery Historian了,默認端口是9999git
$ go run cmd/battery-historian/battery-historian.go
待控制檯輸出listening on port:9999
的時候,能夠打開瀏覽器輸入 http://localhost:9999 就能夠看到github
其次,這個版本的輸入是bugreport文件,根據系統版本不一樣它的獲取方式略有差異:
若是是Android 7.0及以上版本的話能夠經過 adb bugreport bugreport.zip
來獲取bugreport
若是是Android 6.0及如下版本的話能夠經過 adb bugreport > bugreport.txt
來獲取bugreportdocker
獲取到bugreport文件以後,咱們就能夠將其上傳到Battery Historian上進行分析,下面是它的輸出結果shell
在頁面的下方咱們能夠查看這段時間內系統的狀態system stats,也能夠選擇某個應用查看應用的狀態app statswindows
其中咱們能夠看到Device estimated power use
中顯示了估算的應用耗電量值爲 0.18%
瀏覽器
Battery Historian還有個比較功能,在首頁選擇 Switch to Bugreport Comparisor,而後就能夠上傳兩個不一樣的bugreport文件,submit以後就能夠看到它們的對比結果了,這個功能用來分析同一個應用的兩個不一樣版本先後的耗電量很是有用。性能優化
須要注意的是,通常開始統計數據以前須要使用下面的命令將之前的累積數據清空
adb shell dumpsys batterystats --reset
By default, Android does not record timestamps for application-specific userspace wakelock transitions even though aggregate statistics are maintained on a running basis. If you want Historian to display detailed information about each individual wakelock on the timeline, you should enable full wakelock reporting using the following command before starting your experiment:
adb shell dumpsys batterystats --enable full-wake-history
關於bugreport相關的知識推薦閱讀Android adb bugreport工具分析和使用這篇文章,做者簡單地從源碼角度分析了adb bugreport
命令的運行原理,結論是bugreport實際上是啓動了dumpstate服務來輸出數據,其中數據來源包括:
1.系統屬性
2./proc和/sys節點文件
3.執行shell命令得到相關輸出
4.logcat輸出
5.Android Framework Services信息基本使用dumpsys命令經過binder調用服務中的dump函數得到信息
下面是其餘的幾篇關於battery-historian使用的文章可供參考
(1)Android性能專項測試之battery-historian使用
(2)Android性能專項測試之Batterystats
(3)Battery Historian 2.0 for windows環境搭建
3.關於電量方面的Android性能優化
電量方面的性能優化能夠參考 性能優化典範中的Android性能優化之電量篇
主要有如下兩點:
(1)爲了減小電量的消耗,在蜂窩移動網絡下,最好作到批量執行網絡請求,儘可能避免頻繁的間隔網絡請求
(2)使用Job Scheduler,應用須要作的事情就是判斷哪些任務是不緊急的,能夠交給Job Scheduler來處理,Job Scheduler集中處理收到的任務,選擇合適的時間,合適的網絡,再一塊兒執行
Hujiawei is a mobile developer Guangdong, China https://hujiaweibujidao.github.io/本博客全部文章均爲原創,請勿隨意轉載,如需轉載請聯繫我 (hujiawei090807 AT gmail.com)我在小專欄有個移動開發技術專欄,不按期分享移動開發的核心技術,總結移動開發的實戰經驗
參考
https://hub.docker.com/r/bhaavan/battery-historian/