Android應用性能測試


Android用戶也許會經常碰到以下的問題:

1)應用后台開着,手機很快沒電了——應用耗電大

2)首次/非首次啟動應用,進入應用特別慢——應用啟動慢

3)應用使用過程中,越來越卡——CPU能力不足/內存泄露

4)應用頁面卡頓——幀率較低、頁面卡頓

因此,對開發的Android應用,必須對其進行性能測試,不然將會直接影響用戶體驗。

一.啟動時間                                                                                                                                                                                       

啟動時間同樣也遵循2-5-8原則,所謂2-5-8原則就是當用戶能夠在2秒以內啟動應用進入第一幀,會感覺系統的響應很快;當用戶在2-5秒之間得到響應時,會感覺系統的響應速度還可以;當用戶在5-8秒以內得到響應時,會感覺系統的響應速度很慢,但是還可以接受;而當用戶在超過8秒后仍然無法得到響應時,會感覺系統糟透了,或者認為系統已經失去響應,而選擇退出這個app或者卸載該app。因此啟動時間對用戶的使用行為起到至關重要的作用。

這里啟動時間分兩種情況:首次啟動(冷啟動)和非首次啟動(熱啟動)應用所花費的時間。

在測試app啟動時間之前,我們先來看看這張經典的Activity生命周期圖,如圖1。

image

                         圖1 Activity的生命周期

流程簡介:

1.啟動Activity:系統會先調用onCreate方法,然后調用onStart方法,最后調用onResume,Activity進入運行狀態。

2.當前Activity被其他Activity覆蓋或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。

3.當前Activity由被覆蓋狀態回到前台或解鎖屏:系統會調用onResume方法,再次進入運行狀態。

4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居后台:系統會先調用onPause方法,然后調用onStop方法,進入停滯狀態。

5.用戶后退回到此Activity:系統會先調用onRestart方法,然后調用onStart方法,最后調用onResume方法,再次進入運行狀態。

6.當前Activity處於被覆蓋狀態或者后台不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而后用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。

7.用戶退出當前Activity:系統先調用onPause方法,然后調用onStop方法,最后調用onDestory方法,結束當前Activity。

從Activity的生命周期流程圖,我們可以看出啟動時間即onCreate()方法開始執行到onResume()方法執行結束的時間,也就是activity完全啟動的時間。

那么怎么獲取該時間?

方法一:通過logcat中ActivityManager的相關數據獲取。

1)ddms設置過濾條件“by Log Tag”為:ActivityManager;

2)啟動app,查看通過DDMS抓取到的log。

set

以2345王牌瀏覽器app為例,可查看獲得log如下:

image

除了通過DDMS抓取外,還可以通過adb logcat命令來獲取。

>adb logcat -d -s ActivityManager|findstr "Displayed">D:\log.txt

image

image

其實兩者獲取到的信息是一樣的(這里演示時非同一次啟動,因此啟動時間有點差異)。只是DDMS抓的通常是main緩存中的,也就是應用程序打印的日志文件,可以實時查看。而通過命令抓取的話,只能重定向到文件,抓完之后才能查看。

方法二:adb命令獲取,在前面的博文常用的adb命令中對adb shell也有些許介紹。

1)獲取app包名和類名

>adb shell dumpsys activity|findstr mFocusedActivity

2)獲取啟動時間

>adb shell am start -W –n <packageName>/<activityName>

image

通過比較,可以發現這兩種方法獲取到的時間是一樣的。(注意:這兩種方法都是同一次啟動,非同一次啟動,會有差異)

對於這幾個時間,這里引用知乎作者Gracker答案中的結論:“如果只關心某個應用自身啟動耗時,參考TotalTime;如果關心系統啟動應用耗時,參考WaitTime;如果關心應用有界面Activity啟動耗時,參考ThisTime。”

二.性能測試工具——Emmagee                                                                                                                                                         

Emmagee是一款簡單易用的Android性能檢測小工具,主要用於監控單個App的CPU,內存,流量,啟動耗時,電量,電流等性能狀態的變化。

1)通過官方網站安裝(個別機型目前不支持),設置“應用退出后台后仍可監聽”便於自動化測試。

2)通過adb命令在sdcard目錄下pull出測試結果csv文檔(也可通過app配置郵箱,發送到自己的郵箱)。

image

image

3)查看測試結果csv文檔,這里以百度瀏覽器app為例,測試結果如下。

image

注釋:

已知部分不支持的機型可在此查閱:https://github.com/NetEase/Emmagee/wiki/Some-devices-are-not-supported

電流: 小於0是放電大於0是充電

啟動時間: 為空是應用已啟動或者未搜集到啟動時間

N/A: 不支持或者數據異常

4)利用excel的功能生成統計圖,方便分析。

imageimageimage

該工具測試的結果可作為測試參考,另外對於幀率還可以用FPS Meter工具進行測試。

三.利用adb命令監測app相關性能信息                                                                                                                         

在這里就不一一演示了。

//內存使用率
1.adb shell dumpsys meminfo <pakagename>
2. 通過android提供的API來測試(ActivityManager.MemoryInfo())

//CPU占有率
1.adb shell top
2.adb shell dumpsys cpuinfo

//功耗
1.adb shell dumpsys battery
2.通過android本身的API來測試(ProwerManager.WakeLock)

//查看總體的CPU占用
# cat /proc/stat

//查看進程的CPU占用
# cat /proc/<PID>/stat

//查看總體的RAM
# cat /proc/meminfo | head -n 4

//查看進程的RAM
# dumpsys meminfo <packagename>
# dumpsys meminfo <PID>

//查看進程的當前RAM
# procrank

//開機后的總流量(字節數)
# cat proc/self/net/dev

//上傳流量/上行流量
# cat /proc/uid_stat/2000/tcp_snd

//下載流量/下行流量
# cat /proc/uid_stat/2000/tcp_rcv

四.穩定性測試/壓力測試                                                                                                                                         

在前面的博客常用的adb命令中介紹過adb shell monkey來對app進行壓力測試,請參考。

五.其他                                                                                                                                                              

在這里推薦兩個雲測平台:

1.itestin

2.騰訊優測

參考文獻:

1.Android Activity生命周期:http://kb.cnblogs.com/page/70125/

2.Emmagee官網:https://github.com/NetEase/Emmagee/releases


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM