引言
1. Android性能優(yōu)化篇之內(nèi)存優(yōu)化--內(nèi)存泄漏
2.Android性能優(yōu)化篇之內(nèi)存優(yōu)化--內(nèi)存優(yōu)化分析工具
3.Android性能優(yōu)化篇之UI渲染性能優(yōu)化
4.Android性能優(yōu)化篇之計算性能優(yōu)化
5.Android性能優(yōu)化篇之電量優(yōu)化(1)——電量消耗分析
6.Android性能優(yōu)化篇之電量優(yōu)化(2)
7.Android性能優(yōu)化篇之網(wǎng)絡(luò)優(yōu)化
8.Android性能優(yōu)化篇之Bitmap優(yōu)化
9.Android性能優(yōu)化篇之圖片壓縮優(yōu)化
10.Android性能優(yōu)化篇之多線程并發(fā)優(yōu)化
11.Android性能優(yōu)化篇之?dāng)?shù)據(jù)傳輸效率優(yōu)化
12.Android性能優(yōu)化篇之程序啟動時間性能優(yōu)化
13.Android性能優(yōu)化篇之安裝包性能優(yōu)化
14.Android性能優(yōu)化篇之服務(wù)優(yōu)化
介紹
當(dāng)我們使用Android完成任務(wù)時,設(shè)備硬件正在快速消耗電池電量來完成這些任務(wù)搬泥。任務(wù)越繁重桑寨,消耗的電量越多越快。這樣用戶就會在想是哪一個應(yīng)用導(dǎo)致電量消耗的怎么快的忿檩?
要想寫出耗電量低的應(yīng)用的關(guān)鍵是要透徹理解電量消耗的全部過程尉尾。
我們很想知道我的應(yīng)用執(zhí)行的哪些任務(wù)消耗的電量是最多的?這個問題確實會很棘手燥透。電量消耗的計算與統(tǒng)計是一件麻煩而且矛盾的事情沙咏,記錄電量消耗本身也是一個費電量的事情。唯一可行的方案是使用第三方監(jiān)測電量的設(shè)備班套,這樣才能夠獲取到真實的電量消耗(因為第三方硬件監(jiān)測的時候是用的自己的供電而不是用的手機的電量)肢藐。1.電量消耗分析
待機狀態(tài)的電量消耗
使用和喚醒屏幕后
當(dāng)設(shè)備從休眠狀態(tài)中,被應(yīng)用程序假面喚醒時孽尽,你會看到在第一次喚醒時窖壕,這里有一條電量使用高峰線
CUP喚醒時的高峰線
后續(xù)的一些執(zhí)行的消耗
值得注意的是當(dāng)工作完成后,設(shè)備會主動進行休眠杉女,這非常重要瞻讽,在不使用或者很少使用的情況下,長時間保持屏幕喚醒會迅速消耗電池的電量熏挎。
蜂窩式無線
當(dāng)設(shè)備通過無線網(wǎng)發(fā)送數(shù)據(jù)的時候速勇,為了使用硬件,這里會出現(xiàn)一個喚醒好點高峰坎拐。接下來還有一個高數(shù)值烦磁,這是發(fā)送數(shù)據(jù)包消耗的電量,然后接受數(shù)據(jù)包也會消耗大量電量 也看到一個峰值哼勇。
所以我們指導(dǎo)了都伪,開啟無線模式這個過程非常耗電,那么硬件這塊為了防止頻繁開啟關(guān)閉耗電积担,采取了一個無奈的辦法陨晶,會在一個小段時間內(nèi)保持開啟模式,防止短時間內(nèi)還有數(shù)據(jù)包需要接收帝璧。這些數(shù)據(jù)非常有用先誉,可是 不是所有開發(fā)者都有這個第三方設(shè)備跟蹤。但是使用Android L版本就可以利用到新的一系列的工具來優(yōu)化應(yīng)用程序的耗電的烁。(這里顯然不要考慮兼容性問題吧褐耳,我只是想測電量消耗問題,同一款A(yù)PP在不同版本上耗電情況應(yīng)該不會有太大影響渴庆。)
2.Battery Historian(電量使用記錄分析工具)
Battery Historian是Android 5.0開始引入的新API铃芦。通過下面的指令,可以得到設(shè)備上的電量消耗信息:
2.1 配置分析環(huán)境
第一種 通過安裝Docker環(huán)境來安裝
因本人沒有使用這種襟雷,想要了解的朋友可以參考文檔
第二種 源碼安裝(1).GO環(huán)境安裝下載
(2). 安裝Git下載
(3). 安裝Python下載
(4). 安裝Java環(huán)境
(5). 下載Battery Historian源碼并且運行
下載源碼
go get -d -u github.com/google/battery-historian/
運行Battery Historian
cd $GOPATH/src/github.com/google/battery-historian
go run setup.go
開啟服務(wù)
go run cmd/battery-historian/battery-historian.go
檢查/battery-historian是否運行
登錄網(wǎng)址 http://localhost:9999查看
詳細(xì)可以參考Google官方的文檔查看
2.2 導(dǎo)出電量發(fā)現(xiàn)文件
historian-V1
$ adb shell dumpsys batterystats > xxx.txt //得到整個設(shè)備的電量消耗信息
$ adb shell dumpsys batterystats > com.package.name > xxx.txt //得到指定app相關(guān)的電量消耗信息
historian-V2
android 6.0 以及以下版本
adb bugreport > bugreport.txt
android 7.0
adb bugreport bugreport.zip
2.3 開始分析
啟動battery-historian服務(wù)刃滓,打開http://localhost:9999,上傳bugreport.txt或者bugreport.zip文件
3.battery-historian分析
現(xiàn)在我們就來分析下面的面板:
橫坐標(biāo)
我們看到下面的橫坐標(biāo)是代表上海的時間.
坐標(biāo)就是一個時間范圍嗤军,咱們的例子中統(tǒng)計的數(shù)據(jù)是以重置為起點注盈,獲取bugreport內(nèi)容時刻為終點。我們一共采集了多長時間的數(shù)據(jù)叙赚,圖表下也有信息說明老客。(經(jīng)其他人的反饋,這個坐標(biāo)間隔是會隨著時間的長度發(fā)生改變震叮,所以要以你的實際情況為準(zhǔn)胧砰。通過滾動鼠標(biāo)來調(diào)整縮放級別)
縱坐標(biāo)
縱坐標(biāo)的數(shù)據(jù)有點多,我們來一個一個分析苇瓣。
battery_level
電量等級我們看到面板的右邊就是電量等級的指標(biāo)尉间,橫著面板的黑線就代表電量等級,我們可以把鼠標(biāo)放到上面來查看電量的等級值。
也可以在橫坐標(biāo)的battery_level來查看
顯示當(dāng)前時間哲嘲,電量等級等等贪薪。
CPU running
界面的狀態(tài),主要判斷是否處于idle的狀態(tài)眠副。用來判斷無操作狀態(tài)下電量的消耗画切。
Userspace wakelock
wake_lock 該屬性是記錄wake_lock模塊的工作時間。是否有停止的時候等
Screen
屏幕是否點亮囱怕,這一點可以考慮到睡眠狀態(tài)和點亮狀態(tài)下電量的使用信息霍弹。
Top app
該欄顯示當(dāng)前時刻哪個app處于最上層,就是當(dāng)前手機運行的app娃弓,用來判斷某個app對手機電量的影響典格,這樣也能判斷出該app的耗電量信息。該欄記錄了應(yīng)用在某一個時刻啟動台丛,以及運行的時間耍缴,這對我們比對不同應(yīng)用對性能的影響有很大的幫助。
Activity Manager Proc
Mobile signal strength
移動信號強度
Wifi scan
wifi掃描的時間
Wifi supplicant
當(dāng)前wifif狀態(tài)
Wifi radio
wifi信號
Wifi signal strength
wifi信號強度
Wifi running
wifi是否連接
Wifi on
wifi是否開啟
Audio
音頻播放的時間點
Temperature
當(dāng)前手機溫度
Plugged
充電狀態(tài)齐佳,這一欄顯示是否進行了充電私恬,以及充電的時間范圍。
Charging on
是否在充電
health
電池健康狀態(tài)的信息炼吴,這個信息一定程度上反映了這塊電池使用了多長時間本鸣。
這一欄記錄電池狀態(tài)在何時發(fā)生改變,上面的圖中電池狀態(tài)一直處于good狀態(tài)硅蹦。plug
充電方式荣德,usb或者插座,以及顯示連接的時間童芹。
這一欄顯示了不同的充電方式對電量使用的影響涮瞻。Job
后臺的工作,比如服務(wù)service的運行假褪。從下面圖中可以看到qihoo的AppStore和魯大師都在運行后臺服務(wù)署咽。
data_conn
數(shù)據(jù)連接方式的改變,上面的edge是說明采用的gprs的方式連接網(wǎng)絡(luò)的生音。此數(shù)據(jù)可以看出手機是使用2g宁否,3g,4g還是wifi進行數(shù)據(jù)交換的缀遍。這一欄可以看出不同的連接方式對電量使用的影響慕匠。
status
電池狀態(tài)信息,有充電域醇,放電台谊,未充電蓉媳,已充滿,未知等不同狀態(tài)锅铅。
這一欄記錄了電池狀態(tài)的改變信息酪呻。phone_signal_strength
手機信號狀態(tài)的改變。
這一欄記錄手機信號的強弱變化圖狠角,依次來判斷手機信號對電量的影響号杠。Sync
是否跟后臺同步.
可以把鼠標(biāo)停在某一項上面蚪腋》岣瑁可以看到何時sync同步 啟動的,持續(xù)時間Duration多久屉凯。
電池容量不會顯示單一行為消耗的具體電量立帖,這里只能顯示使用電池的頻率和時長,你可以看分時段的剩余電量來了解具體消耗了多少電量悠砚。
wake_lock_in
wake_lock有不同的組件晓勇,這個地方記錄在某一個時刻,有哪些部件開始工作灌旧,以及工作的時間绑咱。
gps
gps是否開啟
phone_in_call
是否進行通話