dumpsys命令可以dump系統(tǒng)各種服務(wù)的狀態(tài),因此在平常的開發(fā)過程中如果很好的掌握dumpsys的用法薛闪,會事半功倍智玻。
1. dumpsys命令用法
adb shell dumpsys ...
"usage: dumpsys\n"
" To dump all services.\n"
"or:\n"
" dumpsys [-t TIMEOUT] [--help | -l | --skip SERVICES | SERVICE [ARGS]]\n"
" --help: shows this help\n"
" -l: only list services, do not dump them\n"
" -t TIMEOUT: TIMEOUT to use in seconds instead of default 10 seconds\n"
" --skip SERVICES: dumps all services but SERVICES (comma-separated list)\n"
" SERVICE [ARGS]: dumps only service SERVICE, optionally passing ARGS to it\n");
例如可以通過下面的方式來查詢當(dāng)前系統(tǒng)支持的所有dump服務(wù)寥假。
adb shell dumpsys -l
借鑒gityuan的博客總結(jié)了比較重要的服務(wù)對應(yīng)的類名和功能盲泛。
服務(wù)名 | 類名 | 功能 |
---|---|---|
activity | ActivityManagerService | AMS相關(guān)信息 |
package | PackageManagerService | PMS相關(guān)信息 |
window | WindowManagerService | WMS相關(guān)信息 |
input | InputManagerService | IMS相關(guān)信息 |
power | PowerManagerService | PMS相關(guān)信息 |
batterystats | BatterystatsService | 電池統(tǒng)計信息 |
battery | BatteryService | 電池信息 |
alarm | AlarmManagerService | 鬧鐘信息 |
dropbox | DropboxManagerService | 調(diào)試相關(guān) |
procstats | ProcessStatsService | 進(jìn)程統(tǒng)計 |
cpuinfo | CpuBinder | CPU |
meminfo | MemBinder | 內(nèi)存 |
gfxinfo | GraphicsBinder | 圖像 |
dbinfo | DbBinder | 數(shù)據(jù)庫 |
服務(wù)名 | 功能 |
---|---|
SurfaceFlinger | 圖像相關(guān) |
appops | app使用情況 |
permission | 權(quán)限 |
processinfo | 進(jìn)程服務(wù) |
batteryproperties | 電池相關(guān) |
audio | 查看聲音信息 |
netstats | 查看網(wǎng)絡(luò)統(tǒng)計信息 |
diskstats | 查看空間free狀態(tài) |
jobscheduler | 查看任務(wù)計劃 |
wifi | wifi信息 |
diskstats | 磁盤情況 |
usagestats | 用戶使用情況 |
devicestoragemonitor | 設(shè)備信息 |
… | … |
2. 一些常用場景
-
場景1
當(dāng)你想要查看當(dāng)前手機(jī)屏幕正在顯示的頁面是哪個進(jìn)程的那個activity時,你可以輸入
adb shell dumpsys activity top |grep mResumed=true -C 10
WX20181122-181657@2x.png
解讀:- grep mResumed=true代表查詢當(dāng)前處于mResumed=true的activity摔握,也就是正在前臺展示的Activity;
- Activity為com.ss.android.article.news/.activity.MainActivity寄狼,進(jìn)程名為com.ss.android.article.news,進(jìn)程pid=20958;
-
場景2
查詢某個App所有service狀態(tài)
adb shell dumpsys activity s com.ss.android.article.news
image.png
解讀:- Service名稱為
com.ss.android.article.news/com.ss.android.message.NotifyService
- 運行在進(jìn)程
pid=21484
進(jìn)程名為:com.ss.android.article.news:push
,uid=u0a158
- Intent信息
intent={cmp=com.ss.android.article.news/com.ss.android.message.NotifyService}
當(dāng)然還有一些其他的信息氨淌,比如packageName例嘱,baseDir(apk路徑)狡逢,dataDir(數(shù)據(jù)存儲路徑),createTime拼卵,callerPackage等各種信息。
- Service名稱為
-
場景3
查詢某個App的所有Activity狀態(tài)蛮艰,其中包括頁面的View Hierarchy信息
adb shell dumpsys activity a com.ss.android.article.news
image.png
解讀:-
TaskRecord{Hashcode #TaskId Affinity UserId=0 StackId=1 Activity個數(shù)=1}
腋腮,從上圖中我們可以看到,taskid=3251,Affinity=com.ss.android.article.news,userid=0,stackid=1,activity為1
effectiveUid為當(dāng)前task所屬Uid壤蚜,mCallingUid為調(diào)用者Uid=u0a171,mCallingPackage為調(diào)用者包名:com.ss.android.article.news
realActivity為com.ss.android.article.news/.activity.SplashBadgeActivity
-
-
場景4:查詢某個App的進(jìn)程狀態(tài)
adb shell dumpsys activity p com.ss.android.article.news
image.png
解讀:
- 格式:
ProcessRecord{Hashcode pid:進(jìn)程名/uid}
即寡,進(jìn)程pid=3938
,進(jìn)程名為com.ss.android.article.news
袜刷,uid=u0a171
.
該進(jìn)程中還有Services聪富,Connections, Providers, Receivers
等信息.
當(dāng)然還有很多其他場景,這里就不一一舉例了著蟹,大家可以多多嘗試墩蔓,親自去體驗。