一.概述
在Android 開發(fā)過(guò)程中,為了查詢當(dāng)前手機(jī)運(yùn)行時(shí)狀態(tài)的變化值,需要通過(guò)dumpsys activity命令來(lái)完成,該方法最終是調(diào)用AMS.dump()方法。
dumpsys命令用法簡(jiǎn)要介紹過(guò)dumpsys命令 的基本用法缺厉,以及系統(tǒng)服務(wù)列表信息,那么本文重點(diǎn)介紹AMS。 根據(jù)dumpsys activity傳遞不同的參數(shù)提针, 對(duì)于AMS.dump便會(huì)輸出相應(yīng)的對(duì)象信息命爬。 具體可以跟哪些參數(shù).
1.1 命令格式
dumpsys activity? [options]? [WHAT]
其中options為可選項(xiàng),以-開頭辐脖, 主要有以下幾類:
options含義
-a包括所有可用Server狀態(tài)
-c包括Client狀態(tài)饲宛,即App端情況
-p PACKAGE限定輸出指定包名
1.2 WHAT參數(shù)
列舉常見的WHAT參數(shù):
序號(hào)WHAT解釋對(duì)應(yīng)源碼
? ?WHAT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 解釋? ? ? ? ? ? ? ? ? ? ? 對(duì)應(yīng)的源碼
1? a[ctivities]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?activity狀態(tài)? ? ? ? ? ?dumpActivitiesLocked()
2? ?b[roadcasts] [PACKAGE_NAME]? ?broadcast狀態(tài)? ? ? ?dumpBroadcastsLocked()
3? s[ervices] [COMP_SPEC …]? ? ? ? ? ?service狀態(tài)? ? ? ? ? ?newServiceDumperLocked().dumpLocked
4? ?prov[iders] [COMP_SPEC …]? ? ? ?content provider狀態(tài)? ?dumpProwevidersLocked()
5? p[rocesses]? ?[PACKAGE_NAME]? ? ? 進(jìn)程狀態(tài)? ? ? ? ? ? ? ? ? dumpProcessesLocked()
6? ?o[om]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 內(nèi)存管理? ? ? ? ? ? ? ?dumpOomLocked()
7? ?i[ntents] [PACKAGE_NAME]? ? pending intent狀態(tài)? ? ? ? ? ?dumpPendingIntentsLocked()
8? ?r[ecents]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?最近? ? ? ? ? ? ? ? ? ? activitydumpRecentsLocked()
9? ? ? perm[issions]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? URI授權(quán)情況? ? ? ? ? ? ? ?dumpPermissionsLocked()
10? ? ?all所有? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?activities信息? ? ? ? ? ? ? ?dumpActivity()
11? ? ? ?top? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 頂部activity信息? ? ? ? ? ? dumpActivity()
12? ? ? ? package? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?package相關(guān)信息? ? ? ? ? ? ? ? dump()
其中PACKAGE_NAME是指可跟包名,COMP_SPEC是指可跟具體組件信息嗜价,中括號(hào)是指縮寫字母艇抠;
二. dumpsys activity
前面介紹dumpsys activity根據(jù)后面跟著的不同參數(shù)則輸出相應(yīng)的內(nèi)容,當(dāng)不跟任何參數(shù)久锥,?dumpsys activity等價(jià)于依次輸出下面8條命令:
1)dumpsys activity intents
2) dumpsys activity broadcasts //廣播
3) dumpsys activity providers? //provider
4) dumpsys activity permissions
5) dumpsys activity services? //服務(wù)
6) dumpsys activity recents
7) dumpsys activity activities //activity
8) dumpsys activity processes
依次簡(jiǎn)要說(shuō)明這8條命令:
2.1 intents
輸出對(duì)象:
PendingIntentRecord
2.2 broadcasts
主要輸出的對(duì)象:
1)ReceiverList, BroadcastFilter,
2)IntentResolver,
3)BroadcastQueue, BroadcastRecord
4)Handler, Looper
2.3 provider
主要輸出的對(duì)象:
1)ProviderMap
2)ContentProviderRecord家淤, ContentProviderConnection
2.4?permissions
主要輸出的對(duì)象:
1)UriPermission
2.5?Service
主要輸出的對(duì)象:
1)ActiveServices,
2)ServiceRecord, ConnectionRecord,ProcessRecord
2.6 recents
主要輸出的對(duì)象:
TaskRecord
2.7activities
主要輸出的對(duì)象:
1)ActivityStackSupervisor, ActivityStack,
2)TaskRecord, ActivityRecord
3)ActivityThread, Activity
4)ViewRootImpl
5)Looper, MessageQueue
2.8 processes
主要輸出的對(duì)象:
1)AMS各種進(jìn)程對(duì)象
2)ProcessRecord, UidRecord
3 dumpsys 使用
adb shell dumpsys,默認(rèn)打印出當(dāng)前系統(tǒng)所有service信息瑟由,在后面可加上具體的服務(wù)名
需要列出當(dāng)前運(yùn)行的服務(wù)絮重,可運(yùn)行:
adb shell dumpsys | findstr DUMP
下面簡(jiǎn)單列下我用到的一些命令...(在編寫腳本時(shí)需要獲取一些狀態(tài)值供判斷用)
獲取設(shè)備分辨率:
adb shell dumpsys display | findstr DisplayDeviceInfo
DisplayDeviceInfo{"內(nèi)置屏幕": 1080 x 1920, 55.0 fps, density 480, 464.949 x 468.923 dpi...
獲取設(shè)備電池信息:
adb shell dumpsys battery
Current Battery Service state:
? AC powered: false
? USB powered: true
? Wireless powered: false
? status: 2 #電池狀態(tài)
? health: 2
? present: true
? level: 34 #電量
? scale: 100
? voltage: 3848
? current now: -427943
? temperature: 280 #電池溫度
? technology: Li-ion
獲取cpu信息:
adb shell dumpsys cpuinfo
獲取內(nèi)存信息:
adb shell dumpsys meminfo
要獲取具體應(yīng)用的內(nèi)存信息,可加上包名
adb shell dumpsys meminfo PACKAGE_NAME
獲取Activity信息:
adb shell dumpsys activity
加上-h可以獲取幫助信息
獲取當(dāng)前界面的UI信息歹苦,可以用:
adb shell dumpsys activity top
要獲取當(dāng)前界面的Activity:
adb shell dumpsys activity top | findstr ACTIVITY
獲取package信息:
adb shell dumpsys package
加上-h可以獲取幫助信息
獲取某個(gè)包的信息:
adb shell dumpsys package PACKAGE_NAME
獲取通知信息:
adb shell dumpsys notification
NotificationRecord(0x44217920: pkg=com.sohu.newsclient useron=0x7f0201b5 / com.tencent.news:drawable/icon
? pri=0 score=0
? contentIntent=PendingIntent{4294d748: PendingIntentRecord{44088e90 com.tencent.news startActivity}}
? deleteIntent=null
? tickerText=null
? contentView=android.widget.RemoteViews@441fc810
? defaults=0x00000001 flags=0x00000010
? sound=null
? vibrate=null
? led=0x00000000 onMs=0 offMs=0
? extras={
? ? android.title=農(nóng)業(yè)部:中國(guó)超級(jí)稻畝產(chǎn)超1噸
? ? android.subText=null
? ? android.showChronometer=false
? ? android.icon=2130837941
? ? android.text=農(nóng)業(yè)部今日通報(bào)稱,經(jīng)專家測(cè)產(chǎn),袁隆平領(lǐng)銜培育的中國(guó)“超級(jí)稻”畝產(chǎn)過(guò)千公斤,創(chuàng)造1026.7公斤新紀(jì)錄青伤。詳情>>
? ? android.progress=0
? ? android.progressMax=0
? ? android.showWhen=true
? ? android.infoText=null
? ? android.progressIndeterminate=false
? ? android.scoreModified=false
? }
獲取wifi信息:
adb shell dumpsys wifi
可以獲取到當(dāng)前連接的wifi名、搜索到的wifi列表殴瘦、wifi強(qiáng)度等
獲取電源管理信息:
adb shell dumpsys power
可以獲取到是否處于鎖屏狀態(tài):mWakefulness=Asleep或者mScreenOn=false
亮度值:mScreenBrightness=255
屏幕休眠時(shí)間:Screen off timeout: 60000 ms
屏幕分辨率:mDisplayWidth=1440潮模,mDisplayHeight=2560
等
獲取電話信息:
adb shell dumpsys telephony.registry
可以獲取到電話狀態(tài),例如
mCallState值為0痴施,表示待機(jī)狀態(tài)、1表示來(lái)電未接聽狀態(tài)究流、2表示電話占線狀態(tài)
mCallForwarding=false #是否啟用呼叫轉(zhuǎn)移
mDataConnectionState=2 #0:無(wú)數(shù)據(jù)連接 1:正在創(chuàng)建數(shù)據(jù)連接 2:已連接
mDataConnectionPossible=true? #是否有數(shù)據(jù)連接
mDataConnectionApn=? #APN名稱