標籤:效能 android 調試 traceview 使用者體驗
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時間,被調用次數的資訊。它能有效協助你對代碼的效能的好壞做出判斷,藉助它你可進一步來改善代碼提高應用的效能和使用者體驗。
使用TraceView調試並提高Android應用效能