1. 程式人生 > >Android效能調優工具TraceView介紹 (六)

Android效能調優工具TraceView介紹 (六)

Android效能優化系列彙總已完成,包括:


Android自帶的TraceView堪比java的效能調優工具visualvm執行緒檢視,可以方便的檢視執行緒的執行情況,某個方法執行時間、呼叫次數、在總體中的佔比等,從而定位效能點。
1、生成日誌,執行TraceView
執行TraceView有兩種方式
a、呼叫Debug類
在開始除錯的地方,如Activity的onCreate函式,新增

Java
1Debug.startMethodTracing("tracefilename");

結束除錯的地方,如Activity的onDestroy函式,新增

Java
1 Debug.stopMethodTracing();

之後執行你的app一段時間並退出會在sd卡根目錄生成tracefilename.trace這個log檔案,記錄這段時間內的執行資訊。
將日誌檔案pull到PC端,cmd到android sdk tools資料夾內(或繫結sdk tools目錄到系統path內),執行traceview tracefilename.trace即可開啟TraceView分析介面,如下

android ddms
這種方式可以隨意開始和結束除錯的位置,所以適合具體程式碼的效能排查。find貌似只支援小寫,所以如果查詢JsonObject需要輸入jsonobject

b、使用DDMs


開啟devices視窗,選擇某個程序,點選右上角的start method profilingddms trace

執行app一段時間後,再點選已變成stop method profiling的該按鈕。eclipse會自動彈出debug的標籤(可通過選單File->save as儲存資料)。介面同上面。
這種方式不需要修改程式碼,所以對於沒有原始碼的程式同樣可以進行排查。同時可以方便的進行全域性效能排查

2、TraceView介面資訊介紹
TraceView介面包括時間面板和方法面板
(1) 時間面板(Timeline Panel)
時間面板展示了每個執行緒的執行情況,其中的[1]main即為ui主線

程。
移動到某個位置可以檢視該點對應的方法的執行資訊,點選方法面板則會選中相應的方法。
可以左鍵按住不放選中區域放大區域性精細檢視,不同方法用不同顏色標註

(2) 方法面板(Profile Panel)
方法面板展示了所有方法的執行情況,點選某個方法可以檢視在對應執行緒上的執行時間區域,並會顯示其父方法及子方法。

每個方法包括如下資訊列,可點選某列進行排序,從而確定產生效能問題的函式:
Incl Cpu Time, Excl Cpu Time, Incl Real Time, Excl Real Time, Incl Cpu Time%, Excl Cpu Time%, Incl Real Time%, Excl Real Time%, Calls+RecurCalls/Total, Cpu Time/Call, Real Time/Call
所有的Time都是以毫秒計算。每列具體含義及作用如下:
a. Incl表示將所有子函式耗時也計算在內,Excl則表示不包括子函式的呼叫時間。對比可以確定耗時操作發生是自身還是子函式中。
b. Cpu Time表示佔用cpu執行的時間,Real Time包括Cpu Time以及等待、切換的時間等,所以一般都大於Cpu Time。對比可以判斷耗時操作是否在cpu執行段內。
c. 上面四個指標對應的%表示函式在總時間的佔比。方便檢視某個函式的時間佔比。
d. Calls+RecurCalls/Total表示被外部呼叫次數+遞迴次數/總次數。可以檢視呼叫次數是否符合自己預期。
e. Cpu Time/Call, Real Time/Call表示總的Cpu Time及Real Time與總呼叫次數的比例。檢視每次呼叫的耗時,一般可通過簡單此項確定每個函式的效能。

3、其他調優工具
(1) dmtracedump
sdk tools下的另外一個工具dmtracedump可用於生成上述log檔案內的函式呼叫關係圖,不過在windows上稍微大點的檔案即或報錯

(2) visualvm
看到ddms提供了dump hprof file的功能,本來準備生成hprof檔案用visualvm開啟試試,結果一直打不開..

在銀狐的幫忙下,發現android sdk tools dump的hprof需要經過sdk tools下的hprof-conv轉換為標準的hprof檔案,才能通過visualvm或eclipse的MemoryAnalyzer開啟進行分析,之後就同java一樣了。hprof-conv格式為

hprof-conv <infile> <outfile>

之後會寫篇文章詳細的介紹visualvm和MemoryAnalyzer