標籤:
DDMS工作機制 DDMS全稱Dalvik Debug Monitor Service.DDMS為IDE和emultor及真正的android裝置架起來了一座橋樑,Android DDMS將捕捉到終端的ID,並通過adb建立調試器,從而實現發送指令到測試終端的目的1)每一個Android應用都運行在一個Dalvik虛擬機器執行個體裡,而每一個虛擬機器執行個體都是一個獨立的進程空間。虛擬機器的線程機制,記憶體配置和管理,Mutex等等都是依賴底層作業系統而實現的。所有Android應用的線程都對應一個Linux線程。2)DDMS啟動時會與ADB之間建立一個device monitoring service用於監控裝置。當裝置斷開或連結時,這個service就會通知DDMS3)當一個裝置連結上時,DDSM和ADB之間又會建立VM monitoring service用於監控裝置上的虛擬機器。
4)通過ADB Deamon與裝置上的虛擬機器的debugger建立連結,這樣DDMS就開始與虛擬機器對話了 通過DDMS看到目標機器上啟動並執行進程/現成狀態,可以 android的螢幕到開發機上,可以看進程的heap資訊,可以查看logcat資訊,可以查看進程分配記憶體情況,可以像目標機傳送簡訊以及打電話,可以向android發送地理位置資訊。可以像gdb一樣attach某一個進程調試。 android SDK tools提供了ddms的功能。 Eclipse安裝好adt後會有一個DDMS得perspective.切換到DDMS的視圖下: <ignore_js_op>
DDMS視圖組成 如所示,DDMS視圖由3部分組成:左上視窗(device視窗),左下視窗(Emulator Control),右邊面板組成。
1、device視窗
device視窗顯示了所有當前能找到的所有模擬器或裝置列表和每個裝置當前正在啟動並執行虛擬機器列表。虛擬機器是按程式的包命來顯示的。device標籤欄右上方那一排按鈕分別為:調試某個進程,更新某個進程,更新進程堆棧資訊,停止某個進程,最後一個圖片按 鈕時抓取android目前的螢幕。
2、Emulator Control
在這裡,可以類比一些裝置狀態和行為。
Telephony Status:改變電話語音和資料方案的狀態,類比不同的網路速度。
TelePhony Actions:發送類比的撥打電話和簡訊到模擬器。
Location Controls:發送虛擬定位元據到模擬器裡,我們就可以執行定位之類的操作。可以收工的在Manual裡輸入經度緯度發送到模擬器,也可以通過 GPX和KML檔案。
3、右面板右邊那個視窗中有threads, heap ,Allocation Tracker, file explorer選項卡。分別顯示線程統計資訊,棧資訊,分配跟蹤器以及android的檔案系統。
1)Threads
線程視圖列出了此進程的所有線程。<ignore_js_op>
ID:虛擬機器分配的唯一的線程ID,在Dalvik裡,它們是從3開始的奇數。
Tid:linux的線程ID,For the main thread in a process, this will match the process ID.
Stauts:線程狀態,utime:執行使用者代碼的累計時間
stime:執行系統代碼的累計時間
name:線程的名字
2)VM Heap
展示一些堆的狀態,在記憶體回收其間更新。當選定一個虛擬機器時, VM Heap視圖不能顯示資料,可以點擊右邊麵包上的帶有綠色的”Show heap updates”按鈕,然後在點擊”Cause GC “實施記憶體回收更新堆的狀態。
3)Allocation Tracker
在這個視圖裡,我們可以跟蹤每個選中的虛擬機器的記憶體配置情況。點擊”Start Tracking”後點擊”Get Allocations “就可以看到。
4)File Explorer
通過Device > File Explorer 就開啟File Explorer。這裡可以瀏覽檔案,上傳上傳刪除檔案,當然這是有相應許可權限制的。
常用工具
1、堆查看
點擊Update Heap(更新堆)按鈕,獲得有關選定虛擬機器中堆分配的資訊。
<ignore_js_op>
圖 2
<ignore_js_op>
圖 3
點擊"Cause GC"開始.堆的詳細資料被顯示出來,並附有針對特定配置類型的分配大小圖示。如果您有分配泄漏,這可能是一個很好的檢查點,通過觀看Heap Size(堆大小)的總體趨勢,確保在應用運行期間它不會一直變大。
2、Allocation Tracker(分配跟蹤器)
Allocation Tracker(分配跟蹤器)視圖中顯示了有關分配的更深層細節。點擊“Start Tracking(開始跟蹤)”,在應用中執行某個操作,然後點擊“Get Allocations(獲得分配)”。
<ignore_js_op>
圖 4
所示列表按分配排序,首先顯示最新的分配。選中它可看到一個關於分配如何建立的堆棧軌跡(stack trace)。
仔細查看分配細節,下面的代碼看起來有改進的空間:
dataStr += String.format(" Std. Dev.: %.3f, %.3f, %.3f\n", devX, devY, devZ);
上例可簡單重構為下面的代碼,節省構造臨時char[]的開銷。.
dataStrBuilder.append(String.format(" Std. Dev.: %.3f, %.3f, %.3f\n", devX, devY, devZ));
3、Method Profiling(方法分析)
Method Profiling(方法分析)是DDMS的一款工具,對於快速概覽應用中時間的消耗分布非常有用,也可用於時間關鍵型函數的詳細查看。
<ignore_js_op>
圖 6
在應用運行並執行某個有趣的任務時,如果您想獲得更多有關該任務的效能資料,點擊“Start Method Profiling(開始方法分析)”。分析器只收集少量資料(沒見過超過2或3秒),所以,幾分鐘後再次單擊該表徵圖以停止收集。從DDMS中啟用方法分析器可使工具自動使用內部儲存來儲存分析結果,當捕捉完成後,將它們發送回主機,作進一步分析。
IDE將自動啟動Traceview視窗,協助您在IDE(圖6)中分析結果。
<ignore_js_op>
圖 6
解析結果是最有趣的部分。單擊底部窗格中的方法調用可建立一個層級結構,為您顯示目前的方法——先是調用該方法的母方法,然後是從選定方法中調用的子方法。
android調試工具DDMS