使用TraceView調試並提高Android應用性能

TraceView是android的一個可視化的調試工具。藉助它,你可以具體瞭解你的代碼在運行時的性能表現。它能幫你更好瞭解到代碼運行過程的效率,進而改善代碼,提高你應用的體驗。

在用TraceView工具之前,你需要先生成TraceView日誌文件,文件包含了應用的跟蹤的相關信息,然後再用TraceView工具對文件進行分析。

生成Trace日誌的兩種方法


代碼方式

在代碼中使用Debug類來跟生成日誌文件,調用startMethodTracing()方法開始跟蹤,調用stopMethodTracing()方法來結束跟蹤。用代碼生成日誌好處是你可以很精確地控制跟蹤的範圍,因爲你可以自己設置開始與結束跟蹤的位置。

使用該種方式生成文件,要注意:

需要在AndroidManifest文件中添加下面權限READ_EXTERNAL_STORAGE,允許你的應用對外存儲空間進行寫操作。

下面是使用的Debug類來生成日誌的一個示例:

    // start tracing to "/sdcard/calc.trace"
    Debug.startMethodTracing("calc");
    // ...
    // stop tracing
    Debug.stopMethodTracing();

比如說,你可以在onCreate()裏調用startMethodTracing()來開始跟蹤,在onDestroy()方法裏使用stopMethodTracing()來結束跟蹤。

調用startMethodTracing(“calc”),系統就會將跟蹤文件指定名字命爲calc。如果你使用startMethodTracing(),系統將會跟蹤日誌文件的默認命名爲trace-base-name.trace.當你調用startMethodTracing()方法後,系統開始緩存數據並寫入到日誌文件,一直到你調用stopMethodTracing。如果在調用結束跟蹤方法之前,系統達到緩存大小時,會主動結束日誌跟蹤並向通知欄發送通知。

創建完日誌文件後,需要將日誌文件從手機裏複製到電腦上。你可以使用下面命令進行復制操作:

adb pull /sdcard/calc.trace /tmp

在TraceView上查看跟蹤的日誌文件

使用traceview <trace-base-name>格式的命令可以進行查看日誌文件,如下:

traceview /tmp/calc

直接使用Trace

首先在DDMS的Devices的面板下選中你想要跟蹤應用的進程,然後點擊下面圖中所示的圖標,


點擊圖標後,彈出下面的對話框


Traceview提供了兩種日誌跟蹤模式:

a.跟蹤型。跟蹤每個方法從進到出的整個過程。這種方式能提供準確的執行信息,但是佔用機器的資源較大。

b.抽樣型。按照一個的頻率通過虛擬機來採集數據。這種方式較前一種消耗資源較少,但需要更長的執行時間以獲取代表性的數據。同時,你還可以自定義數據採集的頻率。

點擊ok,運行你的應用一段時間後,再點擊Devices面板的那個按鈕結束數據採集,等待幾秒,TraceView會自動將採集的數據展示出來。

瞭解TraceView的具體使用

TraceView可以將採集的數據信息以視圖的方式呈現。TraceView的視圖有兩部分組成:

-時間軸面板。提供了一個線程和方法從開始到結束的時間內的信息。

-Profile面板。提供某個方法執行的相關信息。

時間軸面板

下圖是時間軸面板的一個示例。左欄部分表示不同的線程,每一個線程佔據一行,例子中第一行[1]main就是主線程。右欄裏的是一個時間軸,時間從左往右逐漸遞增,你可以清晰地從表中看到不同的線程在不同時間段所執行需要的時間。具體到每個線程,你可以查看到執行不同方法所需要的時間,不同的方法用不同的顏色所代替(補充,這些顏色都是交替輪迴的使用來代替不同的方法)。在繪製的圖塊下面有細線出現,被細線選中的部分就是你所選的方法所執行的時間。

小提示,


使用TraceView時,要想對某部分你感興趣的色塊進行放大,用鼠標對你所感興趣的色塊進行框選就ok了。

但TraceView並不支持對面板的時間軸的直接縮小,你可使用下面兩種方式來對時間軸縮小。

a.點擊「時間軸面板」的左上角,時間軸會恢復到最開始全局面貌狀態。

b.將鼠標放大「時間軸面板」的右上角,鼠標會發生變化,然後將鼠標向左方拉伸,這時你可以看到更多的時間軸內的信息。

信息面板

Profile面板包含了你所跟蹤時間內所執行的方法的信息,主要展示的有兩方面:


a.某方法執行的信息,這些信息包括

Incl Cpu Time     某方法佔用Cpu的時間

Excl Cpu Time    某方法本身(不包括子方法)佔用Cpu的時間

Incl Real Time     某方法真正執行的時間

Excel Real Time  某方法本身(不包括子方法)真正執行的時間

Calls+RecurCalls       調用次數+遞歸回調的次數

Cpu Time/Call

Real Time/Call

b.點擊左側某個方法,可以查看更多信息,父方法和所有子方法的具體信息,其中父方法的所在的行用紫色背景,子方法所在的行用黃色的背景。

點擊右側欄的某一列的名字,可以讓表按該列的數據大小的順序進行全局排列。通過數據展示,你可以容易地找到懷疑降低應用性能部分的方法。

比如說,在[信息面板]上,你可以從佔用Incl Cpu Time最長的那個方法下手,那個方法是不是調用次數多,是不是屬於正常情況嗎。如果某個方法佔用Cpu的時間長,但是調用的次數並不多,這種情況更加值得懷疑,結合具體方法進行查看,是不是代碼寫得不夠好。

TraceView提供是在代碼執行過程在不同線程裏,不同方法所佔用的Cpu時間,被調用次數的信息。它能有效幫助你對代碼的性能的好壞做出判斷,藉助它你可進一步來改善代碼提高應用的性能和用戶體驗。

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