文章目錄
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
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下載地址