2011年4月19日 星期二

Android 開發教學筆記 - 使用 DDMS 和 traceview 筆記

DDMS 是 Android 開發中一個極為重要的 debug 工具,可以拿來查看模擬器上頭運行的 process、file system (sdcard) 等,不過我都沒在用 :P 每次開發碰到問題時,就想辦法透過 logcat 印出來看罷了,又再一次不善加利用環境。


這次上了課,了解了 DDMS 的強大,透過 android.os.Debug 可以查看某個 function 的運行時間,搭配 traceview 可以有圖形化介面觀看,除此之外還可以查看記憶體使用量等,十分方便。


建立一個 Project 後,除了模擬器要加 SDCard 空間外,別忘了記得打開 projects 寫入 SDCard 的權限,因為產生的報表會儲存在 SDCard:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


接著對想要監控的函數使用 Debug.startMethodTracing( "report" ) 和 Debug.stopMethodTracing() 夾擊起來,此例以 setContentView(R.layout.main); 為例:



package com.test;

import android.app.Activity;
import android.os.Bundle;
import android.os.Debug;

public class TEST extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Debug.startMethodTracing("report");
        setContentView(R.layout.main);
        Debug.stopMethodTracing();
    }
}


當程式跑起來後,可以用 Eclipse 切換到 DDMS ,先在左上角 device 視窗挑選 process (此例 package 為 com.test),查看 File Explorer 的部份,應該在 sdcard 區會找到 report 字樣的文件檔,此時可以透過 adb 把它取出來,或是透過 DDMS 右上角匯出(pull a file from the device):


$ /path/android-sdk/platform-tools/adb pull /sdcard/report.trace /tmp


ddms


接著用 traceview 查看:


$ path/android-sdk/tools/traceview /tmp/report.trace


traceview


如此就可以查看指定函數所耗費的時間,並且可以使用滑鼠去圈選上方顏色部分,可以拉大圈選範圍以方便觀看喔。


最後補充一點,此處使用的 Debug.startMethodTracing( "report" ) 和 Debug.stopMethodTracing() 僅適用於純 Java 這層的部份,例如有些是 call native c 的部份,則不適用,因此監控花費時間的部份,使用上需留意。另外,查看記憶體使用量是用 Debug.startAllocCounting() 和 Debug.stopAllocCounting() ,或是直接用 DDMS 的 Allocation Tracker 來使用囉。


沒有留言:

張貼留言