TraceView代碼性分析工具

1 記錄

1.1 調用靜態方法android.os.Debug.startMethodTracing();和android.os.Debug.stopMethodTracing();

1)               使用android.os.Debug.startMethodTracing();(開始跟蹤),android.os.Debug.stopMethodTracing();(停止跟蹤),來包裹你要分析的代碼塊。在這兩個靜態方法間的所有方法的調用都會被跟蹤記錄下來存放到設備的/sdcard/xxx.trace文件中(沒有sd的設備,請到內置存儲的根目錄下查找))。

2)               把xxx.trace拷貝到pc上,運行cmd,執行命令xxx\sdk\tools xxx \xxx.trace,如下圖:


3)               出現該工具的圖形界面,如下圖:


注:運行cmd命令後,出現了這樣子的提示,如下圖:


谷歌告訴我們現在traceview這個東西已經被捨棄了,被集成到了Android Device Monitor中去,我也按照提示去Android Device Monitor找到了該功能,但是發現在Android Device Monitor無法使用查找功能,所以暫時還是繼續使用traceview。Android Device Monitor使用該功能的步驟如下圖:

在android studio中打開Android Device Monitor,


選擇File->Open File打開你的xxx.trace文件:



1.2 使用DDMS

打開Android Device Monitor,打開DDMS版面,選擇你要跟蹤的代碼所屬的進程,點擊Start Method Profiling,如下圖:


操作設備,然後點擊Stop Method Profiling,則可以分析剛纔發生了的所有函數調用了,如下圖:



2 分析

2.1 時間軸


左邊是是線程信息,右邊深色部分是顯示執行時間段、白色是線程暫停時間段,把鼠標放在右邊的時間軸上,在由上方顯示當前時間線所執行的函數的具體信息。

2.2 詳細信息


Parent表示調用這個方法的方法,Children表示這個方法中調用的其他方法。

列名

含義

Name

該線程運行過程中所調用的函數名

Incl Cpu Time

某函數佔用的Cpu時間,包含內部調用其它函數的Cpu時間

Excl Cpu Time

某函數佔用的Cpu時間,但不含內部調用其它函數所佔用的Cpu時間

Incl Real Time

某函數運行的真實時間(以毫秒爲單位),內含調用其它函數所佔用的真實時間

Excl Real Time

某函數運行的真實時間(以毫秒爲單位),不含調用其它函數所佔用的真實時間

Call+Recur Calls/Total

某函數被調用次數以及遞歸調用佔總調用次數的百分比

Cpu Time/Call

某函數調用Cpu時間與調用次數的比。相當於該函數平均執行時間

Real Time/Call

同Cpu Time/Call類似,只不過統計單位換成了真實時間

2.3 具體分析方法

1)  如何定位到所關心的地方?

上面只是介紹瞭如何使用TraceView且有兩種用法,但是有時使用第一種方式範圍又不太精確,使用第二種添加代碼的方式,可能有些地方又監聽不到。這種情況可以 嘗試把開始或者結束放到延遲線程中,延遲一段時間在執行開始或者結束。

2)  如何查找出哪些地方比較耗時?

TraceView羅列出了是所有監聽到的方法,當然也包括Android系統很多方法的耗時,如何在這麼多方法裏面查找到自己關心的? 可以通過TraceView底部的find 來查 找,通常Android app都是有包名的,可以先針對某些關心的列排序後,在通過包名進行一個個查找,這些就省去自己篩選出自己app 方法耗時排行的時間。

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