性能優化07_電量優化:battery-historian工具使用

Android性能優化彙總
性能優化07_電量優化:battery-historian安裝

一 數據準備

battery-historian工具需要使用bugreport中的Battery History

  1. 先斷開adb服務,然後開啓adb服務
adb kill-server

開發時做電量記錄時會打開很多可能造成衝突的東西,保險起見重啓adb。

adb devices

就會自動連接查找手機。當然也可以adb start-server
2. 重置電池數據收集

adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats --reset

執行的效果如下:
在這裏插入圖片描述
上面相當於初始化操作,如果不這麼做會有一大堆的干擾的數據,看起來會比較痛苦。然後把數據線直接拔掉(防止數據線造成充放電數據干擾),現在做一些測試,手動或者跑一些自動化的case都行。經過一段時間後,我們重新連接手機確認adb連上了,運行下面這條命令來將bugreport的信息保存到txt文檔中,

adb bugreport > bugreport.txt

或者用下面的命令也可以:

adb shell dumpsys batterystats > batterystats.txt
adb shell dumpsys batterystats > com.example.android.sunshine.app > batterystats.txt

加上包名可以限制輸出的數據是我們要檢測的。
但是這個txt的數據可讀性不強。接下來我們就要用到這個battery-historian工具了。

到此我們有兩種方式分析這個文件:(historian-V1之前的版本 和historian-V2最新的版本)

二 historian-V1之前的版本分析方式:

將txt文檔轉化爲html文件,命令如下。

python historian.py -a bugreport.txt > battery.html

上面的historian.py腳本是Python寫的,所以需要python環境,然後從github上下載這個腳本。文件在github上面的scripts目錄下面,需要下載到命令行所在的目錄
在這裏插入圖片描述
上面兩條命令執行成功後,會在目錄下發現兩個文件
bugreport.txt和battery.html,這個時候我們用google瀏覽器打開html文件,可以看到如下信息:
在這裏插入圖片描述
各個參數的意義
首先我們在bugreport.txt找到Battery History數據欄類似下面的信息:

在這裏插入圖片描述
你在html中信息都能從bugreport.txt中找到相應的信息。
現在來分析各個指標代表的意義:
橫座標
在這裏插入圖片描述
上面的10,20代表的就是秒的意思,它是以一分鐘爲週期,到第60秒的時候變爲0。橫座標就是一個時間範圍,咱們的例子中統計的數據是以重置爲起點,獲取bugreport內容時刻爲終點。我們一共採集了多長時間的數據,圖表下也有信息說明。(經其他人的反饋,這個座標間隔是會隨着時間的長度發生改變,所以要以你的實際情況爲準。這個縮放級別可以調整的,如下圖:)
在這裏插入圖片描述
縱座標

  • battery_level
    電量,可以看出電量的變化。比如上圖中的數據顯示剛開始電量是100%,然後在第11秒-12秒中間的某個時刻降到了99%。
    在這裏插入圖片描述

  • plugged
    充電狀態,這一欄顯示是否進行了充電,以及充電的時間範圍。例如上圖反映了我們在第22s插入了數據線,然後一直持續了數據採集結束。

  • screen
    屏幕是否點亮,這一點可以考慮到睡眠狀態和點亮狀態下電量的使用信息。

  • top
    該欄顯示當前時刻哪個app處於最上層,就是當前手機運行的app,用來判斷某個app對手機電量的影響,這樣也能判斷出該app的耗電量信息。該欄記錄了應用在某一個時刻啓動,以及運行的時間,這對我們比對不同應用對性能的影響有很大的幫助。

  • wake_lock
    該屬性是記錄wake_lock模塊的工作時間。是否有停止的時候等

  • running
    界面的狀態,主要判斷是否處於idle的狀態。用來判斷無操作狀態下電量的消耗。

  • wake_lock_in
    k有不同的組件,這個地方記錄在某一個時刻,有哪些部件開始工作,以及工作的時間。

  • gps :gps是否開啓

  • phone_in_call 是否進行通話

  • Sync 是否跟後臺同步.
    可以把鼠標停在某一項上面。可以看到何時sync同步 啓動的,持續時間Duration多久。
    電池容量不會顯示單一行爲消耗的具體電量,這裏只能顯示使用電池的頻率和時長,你可以看分時段的剩餘電量來了解具體消耗了多少電量。
    在這裏插入圖片描述

  • Job
    後臺的工作,比如服務service的運行。從下面圖中可以看到qihoo的AppStore和魯大師都在運行後臺服務。
    在這裏插入圖片描述

  • data_conn
    數據連接方式的改變,上面的edge是說明採用的gprs的方式連接網絡的。此數據可以看出手機是使用2g,3g,4g還是wifi進行數據交換的。這一欄可以看出不同的連接方式對電量使用的影響。

  • status
    電池狀態信息,有充電,放電,未充電,已充滿,未知等不同狀態。
    這一欄記錄了電池狀態的改變信息。

  • phone_signal_strength
    手機信號狀態的改變。
    這一欄記錄手機信號的強弱變化圖,依次來判斷手機信號對電量的影響。

  • health
    電池健康狀態的信息,這個信息一定程度上反映了這塊電池使用了多長時間。
    這一欄記錄電池狀態在何時發生改變,上面的圖中電池狀態一直處於good狀態。

  • plug
    充電方式,usb或者插座,以及顯示連接的時間。
    這一欄顯示了不同的充電方式對電量使用的影響。

三 historian-V2最新的版本的方式:

將生成bugreport.txt文件在 http://localhost:9999 中上傳文件生成報告(前提在本地或者某服務器上搭好了battery-historian項目環境)
在這裏插入圖片描述
其實在這裏也可以看到兩種版本分析模式:
在這裏插入圖片描述

四 常見問題

  1. json: unsupported value: NaN
    解決:重啓手機再試就好了。

  2. 打開生成的HTML顯示錯誤如下:
    WARNING: Visualizer disabled. If you see this message, download the HTML then open it.
    解決:需要訪問谷歌服務。

  3. 進部署好的動腦服務器docker,顯示錯誤如下:
    {“UploadResponse”:[{“sdkVersion”:23,"historianV2Cs…
    解決:需要翻牆。

  4. 進部署好的動腦服務器docker,沒有顯示錯誤,但是最上面提示了紅色的顏色塊,表示訪問出錯。
    解決:無法翻牆訪問谷歌服務導致。

  5. 電量數據採集不到
    可能要進入手機的工程模式,打開電量日誌採集。

  6. 生成日誌,上傳分析失敗
    試試:python historian.py -a dongnaobugreport.txt > dongnaobugreport.txt.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章