1. 程式人生 > >安卓App耗電量優化的一些經驗總結

安卓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)減少手機硬體互動

——使用頻率優化和選擇低功耗模式