一、 dumpsys命令
1.1 服務(wù)列表
不同的Android系統(tǒng)版本支持的命令有所不同,可通過(guò)下面命令查看當(dāng)前手機(jī)所支持的dump服務(wù),先進(jìn)入adb shell,再執(zhí)行如下命令:dumpsys -l。 這些服務(wù)名或許你并看不出其調(diào)用的哪個(gè)服務(wù),那么這時(shí)可以通過(guò)下面指令:service list。
表一:


1.2 查詢服務(wù)
通過(guò)下面命令可打印具體某一項(xiàng)服務(wù):dumpsys <service>,其中便是前面表格中的服務(wù)名,比如:
dumpsys cpuinfo //打印一段時(shí)間進(jìn)程的CPU使用百分比排行榜
dumpsys meminfo -h //查看dump內(nèi)存的幫助信息
dumpsys package <packagename> //查看指定包的信息
系統(tǒng)服務(wù)非常之多,那么接下來(lái)將重點(diǎn)說(shuō)說(shuō)其中之一:dumpsys activity用法.
二、 Activity
dumpsys activity [options] [cmd]
下面分別說(shuō)說(shuō)options和cmd有哪些可選值
2.1 options
options可選值:
-a:dump所有;
-c:dump客戶端;
-p [package]:dump指定的包名;
-h:輸出幫助信息;
dumpsys activity等價(jià)于依次輸出下面7條指令:
dumpsys activity intents
dumpsys activity broadcasts
dumpsys activity providers
dumpsys activity services
dumpsys activity recents
dumpsys activity activities
dumpsys activity processes
2.2 cmd
cmd可選值

cmd:上表加粗項(xiàng)是指直接跟包名,另外services和providers還可以跟組件名;
縮寫(xiě):基本都是cmd首字母或者前幾個(gè)字母,用cmd和縮寫(xiě)是等效: dumpsys activity broadcasts dumpsys activity b //等效
三、場(chǎng)景
下面以新浪微博App作為實(shí)例,由于輸出結(jié)果較多,每個(gè)場(chǎng)景截圖只挑選部分重要的信息。
場(chǎng)景1:查詢某個(gè)App所有的Service狀態(tài)
dumpsys activity s com.sina.weibo
解讀:
Service類名為com.morgoo.droidplugin.PluginManagerService;
運(yùn)行在進(jìn)程pid=7220,進(jìn)程名為com.sina.weibo,uid=10094;
通過(guò)bindService連接該服務(wù)的進(jìn)程pid=7306,進(jìn)程名為com.sina.weibo:PluginP03。
當(dāng)然還有packageName,baseDir(apk路徑),dataDir(apk數(shù)據(jù)路徑),createTime等各種信息。另外,新浪微博采用的是360開(kāi)源的Android插件機(jī)制(com.morgoo.droidplugin),主要用于hotfix等功能。
場(chǎng)景2:查詢某個(gè)App所有的廣播狀態(tài)
dumpsys activity s com.sina.weibo
解讀:
android.intent.action.SCREEN_ON代表手機(jī)亮屏廣播;
接收該廣播的receiver有很多個(gè),其中一個(gè)所在進(jìn)程為pid=7220,進(jìn)程名為com.sina.weibo
場(chǎng)景3:查詢某個(gè)App所有的Activity狀態(tài)
輸出結(jié)果較多,尤其是View Hierarchy,下面截取部分:
dumpsys activity a com.sina.weibo
解讀:
格式:TaskRecord{Hashcode #TaskId Affinity UserId=0 Activity個(gè)數(shù)=1};所以上圖信息解析后就是TaskId=1802,Affinity=com.sina.weibo,當(dāng)前Task中Activity個(gè)數(shù)為1。
effectiveUid為當(dāng)前task所屬Uid,mCallingUid為調(diào)用者Uid=u0a94,mCallingPackage為調(diào)用者包名,這里是com.sina.weibo;
realActivity:task中的已啟動(dòng)的Activity組件名com.sina.weibo/.SplashActivity。
場(chǎng)景4:查詢某個(gè)App的進(jìn)程狀態(tài)
dumpsys activity p com.sina.weibo
- 格式:ProcessRecord{Hashcode pid:進(jìn)程名/uid},進(jìn)程pid=7306,進(jìn)程名為com.sina.weibo:PluginP03,uid=10094.
- 該進(jìn)程中還有Services,Connections, Providers, Receivers,可以看出該進(jìn)程是沒(méi)有Activity的進(jìn)程。
還有很多場(chǎng)景,會(huì)用到不同的參數(shù),這里就不再一一列舉,建議大家多去嘗試,慢慢地就更加熟練,再比如:
dumpsys activity top //當(dāng)前界面app狀態(tài)
dumpsys activity oom //進(jìn)程oom狀態(tài)