dumpsys
【用途】Android系統提供的dumpsys工具可以用來查看系統服務信息與狀態。
【使用說明】
adb shell dumpsys <service> [<option>]
【常用服務解釋】
| 編號 |
服務名稱 |
功能 |
| 1 |
account |
顯示accounts信息 |
| 2 |
activity |
顯示所有的activities信息,包括activity棧,棧頂activity等 |
| 3 |
cpuinfo |
顯示CPU信息,系統各進程的CPU使用率 |
| 4 |
window |
顯示鍵盤、窗口和他們的關系。獲取當前應用的component |
| 5 |
wifi |
顯示wifi信息 |
| 7 |
package |
獲取安裝包信息 package $package_name |
| 8 |
usagestats |
每個界面的啟動時間 |
| 9 |
statusbar |
顯示狀態欄相關的信息 |
| 10 |
meminfo |
顯示內存信息。meminfo $package_name or $pid顯示指定程序內存信息 |
| 11 |
diskstats |
顯示磁盤相關信息 |
| 12 |
battery |
顯示電池信息 |
| 13 |
alarm |
顯示應用持鎖情況,可用於分析系統無法待機的問題以及應用層死鎖問題 |
| 14 |
input |
顯示InputReader和InputDispatcher消息隊列,底層事件一般通過inputevent的方式上報,通過查看消息隊列,可以判斷凍屏時內核是否正常(adb shell setprop sys.input.debug 1打開debug信息) |
【代碼實現】
dumpsys代碼在frameworks/base/cmds/dumpsys/dumpsys.cpp
所有dump信息都是由重載了Binder的dump函數的類來完成:
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args){
//TODO: xxxx
}
所有dump信息都是由ServiceManager注冊的services提供的,以meminfo為例:
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中的setSystemProcess函數中注冊meminfo服務:
ServiceManager.addService(“activity”, m);
ServiceManager.addService(“meminfo”,new MemBinder(m));
MemBinder->ProcessRecord->各個正在運行狀態的ApplicationThread的狀態(frameworks/base/core/java/android/app/ActivityThread.java),從中得到需要的meminfo的信息。
