安卓App耗電量優化的一些經驗總結
1、準備工作
磨刀不誤砍柴工。開始優化工作之前,一定要確定“測試場景”和“測試用例”
(1)應用後臺
——滅屏
——亮屏
(2)應用後臺
分析埋點資料 -> 找出高頻頁面 -> 頁面分類歸納 -> 總結出一系列場景
【備註】
<1>測試過程中,一定要拔掉充電線
<2>一定要進行“全功能”測試,以防遺漏。
2、優化手段
2.1 使用系統提供的battery資訊進行排查
2.1.1 •獲取電量日誌
(1)4.4以下
adb shell dumpsys batteryinfo > d:/batterinfo.log
(2)4.4到5.0以下
adb shell dumpsys batterystats > d:/batterstats.log
(3)5.0及其以上
adb bugreport > d:/bugreport.txt
【備註】
<1>開啟電量日誌:adb shell dumpsys batterystats --enable full-wake-history
<2>重置電量日誌:adb shell dumpsys batterystats –-reset
2.1.2 分析資料
(1)5.0以前
——分析方法:直接看log檔案
——關注引數:PID wake time、PID Wake lock time、Wake lock、Proc 資訊、Foreground時間、CPU消耗時間、Service資訊
(2)5.0以後
——分析方法:通過battery-historian,生成更為詳細的分析結果
——關注引數:Wake lock、Proc 資訊、Foreground時間、CPU消耗時間、Service資訊、GPU user time、wifi scan、wifi/net radio
2.1.3 優化調整
(1)wake lock的次數是否合理
(2)Service的啟動次數、執行時長是否合理、是否及時關閉
(3)process的執行時長,是否及時關閉
(4)gps的使用是否合理
(5)網路資料傳輸
(6)呼叫手機硬體邏輯是否合理(wifi掃描,藍芽使用,電量監控。。。)
2.2 使用Android Monitor監測具體程序
2.2.1 分析方法
——觀察各個程序的cpu、network、記憶體、gpu曲線
2.2.2 處理手段
——從曲線中找出波峰規律,針對性優化
2.3 基於程式碼的排查
2.3.1 分模組遮蔽
——使用排除法來縮小範圍,最終定位到問題所在
2.3.2 寫日誌記錄
——在關鍵地方及可疑地方打上日誌,分時段儲存日誌。這樣可以清楚的觀測到哪些程序在哪些時間段有活動跡象;看看有沒有迴圈日誌,或者耗時方法,再回到程式碼裡去檢視
2.3.3 排查定時執行的方法
——搜尋程式碼裡面的定時迴圈執行的方法,考量該方法的功耗;包括:Timer、handler.Postdelayed、ScheduledFutureTask、JobService、Animation、AnimationDrawable等
2.3.4 高耗電操作
——i/o操作,網路資料傳輸,gps使用,wifi掃描
3、優化方案總結
(1)GPS
——使用要謹慎,如精確度不高可用WiFi定位或者基站定位,可用;非要用的話,注意定位資料的複用和定位頻率的閾值
(2)Process和Service
——按需啟動,用完就退出
(3)網路資料互動
——減少網路網路請求次數和資料量;WiFi比手機網路省電
(4)CPU
——減少I/O操作(包括資料庫操作),減少大量的計算
(5)減少手機硬體互動
——使用頻率優化和選擇低功耗模式