手機發燙是爲什麼—— App 電量測試定位方法

爲何要作電量測試

隨着移動互聯網的快速發展,手機的實用性、娛樂性愈來愈強。平常使用中發現,安裝了應用後,即便不怎麼使用,電量也會消耗很快。但若是恢復出場設置充滿電後,手機能夠待機很長時間。真相只有一個:手機耗電的最終元兇是軟件。android

在各大應用市場中搜索「電量管理」相關應用,每一個應用都有幾萬到幾十萬次的下載量。這說明,愈來愈多的用戶開始關注應用電量問題。因此,在研發階段,有效的檢測和定位電量問題,是十分重要的工做。微信

如何可以有效的檢測和定位應用的電量問題呢?能夠從兩個方面入手:一方面,從手機系統入手,瞭解ROM對應用電量消耗的統計原理,進而從代碼層規避沒必要要的電量消耗。另外一方面,從應用自己入手,在保證用戶體驗的前提下,儘量減小沒必要要的操做。網絡

下面分享下,在對應用電量優化過程當中所作的專項測試工做。工具

業界通用的電量測試方法

![](http://i.imgur.com/umpEA4c.jpg)

小結:能夠看出,目前業界現有的電量測試方法不少。除了藉助於其餘設備監測整機電量消耗的硬件測試方案外,android系統也提供了各類獲取應用電量消耗的方法。性能

方法各有優點。但,都是定位於獲取總體電量消耗(整機、應用)。對於開發和測試人員最關注的問題:有效定位致使應用電量消耗的具體緣由,仍然沒法解決。測試

咱們須要的電量測試

在產品研發階段,可以快速獲取應用電量消耗,準肯定位問題緣由的測試方法,是開發和測試人員最須要的方法。因此,從2016年初開始,咱們肯定了電量測試工做的開展方向:優化

一、理清原理:Android系統電量統計原理;spa

二、調整策略:關注整機的硬件測試方案替換爲關注APP的軟件測試方案;操作系統

三、準肯定位:獲取更詳細的數據;命令行

四、提高效率:自動化電量測試方案建設。

Step1理清原理

在對業界現有測試工具的瞭解中,咱們發現Android提供了對應用電量統計的系統工具「耗電排行」。
經過解包ROM源碼並反編譯Settings.apk,找到了Android系統對應用電量消耗統計的接口:com.android.internal.os.BatteryStatsHelper(5.0以後類名)中的方法processAppUsage。該方法中統計了系統對應用各部分的電量消耗:

在解讀源碼的過程當中,發現了一個有意思的文件power_profiler.xml。該文件中列出了手機廠商針對機型硬件定義的單位時間元器件電量消耗值。因爲文件內容的差別,從而致使了,一樣的應用、一樣的操做場景、一樣的外界環境,在不一樣手機上電量消耗不一樣。

![](//blog-10039692.file.myqcloud.com/1493347884314_7551_1493347937351.jpg)

不一樣手機power_profiler.xml文件

小結:經過解讀源碼,掌握到系統對應用電量消耗的統計方法。若是能夠在測試過程當中獲取到組成應用總體消耗的各部分的消耗值,就能夠大致定位到問題方向。

Step2調整策略

硬件測試採集的是整機的電流值,因爲外接干擾因素的影響其餘應用、手機環境、網絡環境、人爲因素等,常常致使的測試結果是:數據波動大、沒法定位緣由。而且,隨着手機硬件、外觀的調整,愈來愈多的機器沒法自主拆卸電池,而廠商對內置版本的電量要求卻愈來愈嚴格。目前現有的硬件測試方案,沒法繼續知足在研發階段對應用電量的有效保障。

既然Android系統已經提供了對單個應用的電量統計應用,咱們就能夠利用源碼並結合實際的需求,對已有的系統工具進行二次開發,經過軟件的方式完成對單個應用耗電量的測試。

Step3準肯定位

理清了系統對應用的電量統計原理後,咱們發現「耗電排行工具」並無詳細輸出組成應用整體電量消耗的每一部分的消耗值。因此,在解決「準肯定位」的問題上,首先可以作的工做就是進一步細化數據。

「工欲善其事必先利其器」。

咱們開發瞭如下兩個工具,支持獲取更詳細的數據。

【工具一:PowerStat2.0】

該工具是對系統「耗電排行工具」的二次開發。使用系統計算公式和API進行計算。
相比較原工具,完善如下幾個特性:

一、數據展現:除了展現組成應用整體電量消耗的每一部分的消耗值,同時顯示使用時長、次數及數據傳輸量信息;

二、傳感器細分;

三、展現power_profiler.xml

四、提供定時測試功能。

【工具二:CPUMonitor】

經過平常監控和用戶反饋發現,致使應用電量消耗升高的最多見問題是CPU問題:

華爲手機用戶反饋電量問題

平常監控電量異常升高問題

依據操做系統的概念—進程是由一個或多個線程組成,能夠將「準肯定位」問題進一步細化到獲取線程的CPU時間片消耗。

爲了可以在電量測試的同時進行CPU時間片數據的採集,並儘量減小其餘消耗的引入,咱們開發了一個手機端的數據採集工具:CPUMonitor。原理以下:

工具具有如下幾個特性:

一、廣播做爲工具驅動方式,方便應用於自動化腳本控制;

二、數據源取自系統:權威、詳細;

三、多樣的採集模式:頻繁模式(freq)、觸發模式(lazy)。

優點:

一、安裝使用無權限要求;

二、可與電量測試同時進行;

三、數據取自系統保證準確性;

四、觸發模式保證了最小性能消耗。

小結:目前,工具已經應用於多個移動端應用的電量測試中。除了能夠高效定位電量問題外,還能夠在功能開發前預估電量消耗,從產品層協助策略制定。經過自研工具的開發,有效的將原有的硬件測試方案替換成關注應用電量消耗的軟件測試方案。自研工具獲取的數據,所有來自於系統提供的接口,保證了數據的準確有效性。

Step4 提高效率

經過測試工具的開發,在一次電量測試過程當中,已經能收集到幫助定位問題的足夠詳細的測試數據。因此,咱們下一步須要思考的就是,如何可以更加高效更加精準的獲取測試數據?
原有的電量測試流程:

存在的問題:

一、人工操做:設備鏈接、環境清理、應用安裝、工具設置、初始數據採集;

二、人工操做:設備斷開、場景操做執行、計時;

三、人工操做:設備鏈接、數據採集&保存。

人工干預每一個環節致使:數據準確性低、執行效率低。

各環節的優化方案:

數據採集:腳本驅動+測試工具 替代 手動執行命令行;

操做執行:自動化腳本 替代 手工操做;

流程控制:PC控制 替代 人工控制。

優化後的電量測試流程:

解決需人工鏈接設備的問題:將傳統的USB線中間增長硬件控制模塊後,可由PC端的腳本控制硬件的斷開鏈接。

解決USB鏈接斷開後場景操做的執行問題:傳統的解決方案:將自動化腳本放到手機端執行。

存在的問題:手機必需要有root權限。

解決的方案:adb無線控制,下發指令。

小結:經過全流程的自動化處理,減小人工干預,除了提升數據的準確性外,有效的提高了測試效率。以1小時待機電量測試爲例,原測試流程和自動化測試流程相比較:

咱們的收益

總結下咱們在電量測試方面所作的工做:

一、經過對Android系統電量統計原理的分析,清晰的掌握到組成APP總體電量消耗的每一部分的消耗值,從而能夠直接定位致使電量問題的大致方向。

二、經過測試工具的開發,獲取到更加詳細的功耗數據,從而能夠直接定位到具體代碼邏輯。

三、經過電量測試的自動化建設,有效提高測試效率,除了縮短測試時長、減小人力投入外,還提升了測試數據的準確性。

電量測試方案應用於移動終端產品,除了能快速檢測定位電量問題外,還能夠協助開發及產品評估新增功能帶來的額外消耗。

經過一年多的工做,咱們總結出一套理論與實踐相結合的電量優化檢測方法:

理論:在瞭解系統對應用電量統計原理的過程當中,發現對wake lock消耗的計算在方法processAppUsage()中是沒有進行條件判斷的。也就是說,若是在亮屏時,代碼邏輯中仍然註冊了wake lock(測試的wake lock是沒有任何意義的),在對應用進行電量統計時,就會計算上這部分的消耗:

在寫代碼時,能夠注意下,在進行wake lock註冊時,首先要判斷手機的狀態。

實踐:在對多個應用進行電量測試的過程當中,發現不一樣產品根據產品特性不一樣,除了共性致使電量異常的問題外,還會存在產品特性相關的操做場景。

咱們拋開產品,抽離出共性問題,整理成下面這個表格:

在用例設計部分,咱們將待機列爲須要關注的場景,是由於用戶對待機時應用的電量消耗更爲敏感。而在這個場景下,常常會出現因爲代碼邏輯問題、產品策略問題致使應用電量消耗異常。在操做過程當中的電量消耗,是用戶預知的消耗。但若是使用不當,也會形成異常消耗。

想知道更多測試相關乾貨 請關注咱們的微信公衆號:騰訊移動品質中心TMQ。

相關文章
相關標籤/搜索