traceview使用總結

1.traceview的用途

traceview是Android sdk中的一個工具,用於分析計算性能,跟蹤方法耗時導致的卡頓問題。它將traceview文件轉爲圖形,直觀的反應出代碼的執行時間、執行次數,便於我們分析。

2.生成trace文件的三種方式

trace文件是log文件的一種,可以通過代碼,也可以使用Android studio生成。

(1)代碼生成
//開始 trace,保存文件到 "/sdcard/homeFragment.trace"
//高版本手機保存到"/sdcard/Android/data/packageName/files/homeFragment.trace"
Debug.startMethodTracing("homeFragment");    
    // ...
Debug.stopMethodTracing();    //結束

導出trace文件到電腦:
adb pull /sdcard/homeFragment.trace C:\Users\Admin\Desktop

若提示No such file,可能保存到sdcard/android 目錄下了:
adb pull /sdcard/Android/data/packageName/files/homeFragment.trace C:\Users\Admin\Desktop
packageName是應用的具體包名

(2)使用android studio生成

profile/cpu 下選擇記錄traceview
cpu/traceview

android studio對trace也做了可視化:包括各方法的執行時間和佔比

(3)DDMS生成

DDSM 全稱 Dalvik Debug Monitor Server,是老版adt的調試工具。可生成trace後,查看。
在這裏插入圖片描述

3.使用traceview打開trace文件

新版Android stuido 中已移除了DDMS,這裏我們使用traceview工具來查看trace文件信息。

工具目錄:androidsdk/tools/traceview.bat

But,打開該目錄後發現,新版sdk中已缺失traceview,我們可以下載一個traceview.bat文件放在該目錄下,命令行打開:
traceview C:\Users\Admin\Desktop\homeFragment.trace

提示報錯:

SWT folder '' does not exist.
Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.

這是依賴庫缺失,下載一個老版的sdk/tools/lib,將它放到tools目錄下(合併lib)即可。
在這裏插入圖片描述

雖然提示deprecated,還是可以打開traceview。

4.分析trace文件

1.打開如下:
在這裏插入圖片描述

  • 上半部分展示了線程:
    • 不同顏色表示不同方法,顏色約長,執行時間越久。
  • 下半部分展示了方法的執行時間:
    • cpu time/call:該方法佔用cpu的時間
    • Calls + Recur Calls/Total :調用、遞歸次數
    • Incl Cpu Time vs Excl Cpu Time:某方法佔用的cpu時間,incl包含內部調用其他方法的時間,excl不包含

2.定位問題

  • 查看耗時的方法:點擊 cpu time/call ,按照時間倒序
  • 查看方法執行次數:點擊 Calls + Recur Calls/Total,按照次數倒序

排序後逐個排查項目代碼,進一步定位問題

3.案例
項目在每次啓動主頁時,耗時在1.5-2.5s,優化性能時,我們需要具體查看:

  • 哪些方法耗時
    在這裏插入圖片描述
    結果:initView方法執行耗時,並將children方法列舉出來,我們可以逐步排查優化

  • 哪些方法執行次數過多:
    在這裏插入圖片描述

結果:shareUtilUser.getString方法高頻執行,查看parents,發現是登錄信息,頻繁操作導致。跟蹤代碼,發現每次獲取登錄的某個信息,會將所有登錄相關的數據,都取出來了,因此這裏就是我們需要優化的地方了。

PS:附上 traceview下載地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章