一、App啟動(dòng)性能分析

1、基本的測(cè)試checklist和手段

image.png

2、專項(xiàng)測(cè)試(用戶維度)

  • 崩潰(Crash,弱網(wǎng))
  • 卡頓(掉幀、gc、cpu)
  • 響應(yīng)慢(啟動(dòng)時(shí)間、交互響應(yīng)、H5加載)
  • 發(fā)熱(cpu,mem、io、network、gps等硬件使用)
  • 掉電快(硬件占用)
  • 兼容性問題(機(jī)型覆蓋、回歸)

3、專項(xiàng)測(cè)試(技術(shù)維度)

  • 崩潰
    • 自動(dòng)遍歷、monkey測(cè)試、橫豎屏切換、快速進(jìn)退
  • 卡頓(掉幀、gc、cpu)
    • 卡頓測(cè)試、內(nèi)存泄漏測(cè)試、method profile
  • 響應(yīng)慢(啟動(dòng)時(shí)間、交互響應(yīng)、H5加載)
    • 冷熱啟動(dòng)、界面切換、h5性能測(cè)試
  • 發(fā)熱(cpu,mem、io、network、gps等硬件使用)
    • method profile、gc統(tǒng)計(jì)、io統(tǒng)計(jì)、流量統(tǒng)計(jì)、硬件使用統(tǒng)計(jì)、耗電量分析
  • 兼容性問題(機(jī)型覆蓋、回歸)
    • 兼容性測(cè)試、自動(dòng)化測(cè)試、自動(dòng)遍歷、monkey測(cè)試

4、App性能

Activity啟動(dòng)流程

image.png

主要流程

  • Application OnCreate
    • 加載第三方的sdk
  • Activity OnCreate
    • 加載自身的邏輯
    • 發(fā)送遠(yuǎn)程數(shù)據(jù)請(qǐng)求xxx.json
    • 渲染界面List

App啟動(dòng)性能指標(biāo)

  • 冷啟動(dòng):在進(jìn)程中已被kill掉,或者剛安裝好的app。不包括other stuff的時(shí)間。(最重要)
  • 暖啟動(dòng):App在后臺(tái)運(yùn)行久了,內(nèi)存系統(tǒng)將其kill掉,此時(shí)進(jìn)行重啟App,會(huì)保存App的一些初始化設(shè)置。不包括other stuff的時(shí)間。
  • 熱啟動(dòng):App在后臺(tái)運(yùn)行。不包括other stuff的時(shí)間。
  • 首屏啟動(dòng):加上other stuff的時(shí)間,比如動(dòng)圖加載等。

建議時(shí)間

  • Cold startup takes 5 seconds or longer.
  • Warm startup takes 2 seconds or longer.
  • Hot startup takes 1.5 seconds or longer.

5、主要工具及流程

  • adb logcat
  • 錄屏+視頻拆幀
  • uiautomator等自動(dòng)化工具200ms巡檢界面變化
  • traceview
  • 硬埋點(diǎn)

使用adb logcat

  • package=com.xueqiu.android
  • 清理緩存數(shù)據(jù): adb shell pm clear $package
  • 停止進(jìn)程: adb shell am force-stop $package
  • 啟動(dòng)app: adb shell am start -S -W $package/.view.WelcomeActivity Alias
    • -S在啟動(dòng)之前停止app,起保險(xiǎn)作用
    • -W等待Activity啟動(dòng)完成
  • 獲取數(shù)據(jù): adb logcat lgrep -i displayed

adb logcat結(jié)果

  • startTime:記錄剛準(zhǔn)備調(diào)用startActivity AndWait()的時(shí)間點(diǎn);
  • endTime:記錄startActivityAndWait()函數(shù)調(diào)用返回的時(shí)間點(diǎn)
  • WaitTime: startActivity AndWait()調(diào)用耗時(shí)
    • WaitTime = endTime - startTime

實(shí)戰(zhàn)

image.png

image.png

6、使用ffmpeg拆針

adb shell am force-stop $package #停止app
adb shell screenrecord --bugreport --time-limit 30 /data/local/tmp/xueqiu.mp4 & #進(jìn)行錄屏并保存視頻到手機(jī)路徑
adb shell am start -S -W $package/.view.WelcomeActivityAlias
wait
adb pull /data/local/tmp/xueqiu.mp4 . #將視頻推到本地
ffmpeg -i xueqiu.mp4 xueqiu.gif #將視頻合成動(dòng)圖
ffmpeg -i xueqiu.mp4 -r 10 frames_%03d.jpg #1秒拆成10針
  • 實(shí)戰(zhàn)


    image.png

    image.png
    • 圖片拆分結(jié)果:


      image.png

下一節(jié):接口性能分析,包括DNS、HTTP/HTTPS的接口性能分析。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容