Android 性能分析工具之TraceView

Android 性能分析工具之TraceView

TraceView簡介

  1. Traceview自己是一個數據分析工具, Android 平臺將Traceview做爲 Android SDK內置的一個工具,主要用於加載 Android 應用程序所生成的trace文件而且分析trace文件採集到的數據裏面每一個方法(函數)在不一樣線程裏調用次數、消耗的時間等等。
  2. Trace文件裏數據的採集則須要使用 Android SDK 中的 Debug 類或者利用 DDMS 工具
  3. Traceview在Android SDK的tools目錄裏,以下圖:
    traceview的位置

配置環境

  1. 步驟一:在系統變量裏新建ANDROID_HOME java

    步驟一

  2. 步驟二:在系統變量的Path裏添加 %ANDROID_HOME%\tools android

    在這裏插入圖片描述

使用代碼生成 trace 文件

  • 在須要分析代碼的開始位置添加如下代碼
//文件默認保存到 sdcard 根目錄下,"/sdcard/testTraceView.trace"
Debug.startMethodTracing("testTraceView");
複製代碼

其中testTraceView參數是自定義,其實就是生成的TraceView文件的文件名,例如testTraceView.traceshell

  • 在須要分析的結束位置添加如下代碼
Debug.stopMethodTracing();
複製代碼

須要添加的權限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
複製代碼

報錯示例

  1. 沒有獲取到權限
E/art: Unable to open trace file '/sdcard/testTrace.trace': Permission denied
複製代碼

2.打開testTrace.trace文件時報錯 ,由於沒有執行Debug.stopMethodTracing();bash

Failed to read the trace filejava.io.IOException: Key section does not have an *end marker
        at com.android.traceview.DmTraceReader.parseKeys(DmTraceReader.java:420)
        at com.android.traceview.DmTraceReader.generateTrees(DmTraceReader.java:91)
        at com.android.traceview.DmTraceReader.<init>(DmTraceReader.java:87)
        at com.android.traceview.MainWindow.main(MainWindow.java:286)
複製代碼

打開testTrace.trace文件時報錯的重要提示:Key section does not have an *end marker at com.android.traceview,說明沒有添加或者執行Debug.stopMethodTracing();函數

查看是否生成trace文件

進入到shell模式執行下面的指令語句 在doc命令窗口或者AndroidStudio裏Terminal窗口裏執行adb shell,下圖本人寫的demo在AndroidStudio裏Terminal窗口查看的截圖: 工具

查看trace文件

注意:若是Debug.startMethodTracing("testTraceView");startMethodTracing裏的參數只填寫testTraceView,則上面的截圖步驟只須要執行一、2兩步就可看到testTraceView.trace文件 須要知道本人爲何執行三、4兩步,請看本人demo裏的startMethodTracing裏的參數性能

導出trace文件

進入到shell模式執行下面的指令語句 adb pull /sdcard/testTraceView.trace E:\folder命令將testTraceView.trace導出到指定到E盤folder目錄。ui

本人demo裏須要執行的命令是: adb pull /sdcard/TraceView/MainActivity_2018-12-07_20_29_02.trace E:\folderspa

打開trace文件

進入到shell模式執行下面的指令語句 traceview E:\folder\testTraceView.trace.net

TraceView界面介紹

TraceView界面介紹
Traceview 界面分上下兩部分 上面是時間軸面板 (Timeline Panel)

  1. 左側顯示的是線程信息
  2. 右側不一樣顏色表明不一樣方法(函數),同一個顏色越長表明該方法執行的時間越久
  3. 右側鼠標放在上面會出現時間線縱軸,在頂部會顯示當前時間線所執行的具體函數信息
  4. 空白表示這個時間段內沒有執行內容

下面是分析面板

各列做用說明
列名 描述
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 同CPU Time/Call相似,只不過統計單位換成了真實時間

注意:每個Time列還對應有一個用時間百分比來統計的列(如Incl Cpu Time列對應還有一個列名爲Incl Cpu Time %的列,表示以時間百分比來統計的Incl Cpu Time)

數據分析示例

數據分析示例

demo下載地址

download.csdn.net/download/ch…

結束

但願分享Traceview工具的正確使用方式能夠爲Android開發者提供一些幫助。謝謝!

相關文章
相關標籤/搜索