一.概述
在Android 开发过程中,为了查询当前手机运行时状态的变化值,需要通过dumpsys activity命令来完成,该方法最终是调用AMS.dump()方法。
dumpsys命令用法简要介绍过dumpsys命令 的基本用法,以及系统服务列表信息,那么本文重点介绍AMS。 根据dumpsys activity传递不同的参数, 对于AMS.dump便会输出相应的对象信息。 具体可以跟哪些参数.
1.1 命令格式
dumpsys activity [options] [WHAT]
其中options为可选项,以-开头, 主要有以下几类:
options含义
-a包括所有可用Server状态
-c包括Client状态,即App端情况
-p PACKAGE限定输出指定包名
1.2 WHAT参数
列举常见的WHAT参数:
序号WHAT解释对应源码
WHAT 解释 对应的源码
1 a[ctivities] activity状态 dumpActivitiesLocked()
2 b[roadcasts] [PACKAGE_NAME] broadcast状态 dumpBroadcastsLocked()
3 s[ervices] [COMP_SPEC …] service状态 newServiceDumperLocked().dumpLocked
4 prov[iders] [COMP_SPEC …] content provider状态 dumpProwevidersLocked()
5 p[rocesses] [PACKAGE_NAME] 进程状态 dumpProcessesLocked()
6 o[om] 内存管理 dumpOomLocked()
7 i[ntents] [PACKAGE_NAME] pending intent状态 dumpPendingIntentsLocked()
8 r[ecents] 最近 activitydumpRecentsLocked()
9 perm[issions] URI授权情况 dumpPermissionsLocked()
10 all所有 activities信息 dumpActivity()
11 top 顶部activity信息 dumpActivity()
12 package package相关信息 dump()
其中PACKAGE_NAME是指可跟包名,COMP_SPEC是指可跟具体组件信息,中括号是指缩写字母;
二. dumpsys activity
前面介绍dumpsys activity根据后面跟着的不同参数则输出相应的内容,当不跟任何参数, dumpsys activity等价于依次输出下面8条命令:
1)dumpsys activity intents
2) dumpsys activity broadcasts //广播
3) dumpsys activity providers //provider
4) dumpsys activity permissions
5) dumpsys activity services //服务
6) dumpsys activity recents
7) dumpsys activity activities //activity
8) dumpsys activity processes
依次简要说明这8条命令:
2.1 intents
![](https://i-blog.csdnimg.cn/blog_migrate/8fa46bc644b7325c24fe4e792fa1ec50.webp?x-image-process=image/format,png)
输出对象:
PendingIntentRecord
2.2 broadcasts
![](https://i-blog.csdnimg.cn/blog_migrate/9d691298c9483d4e22053d47d10808fe.webp?x-image-process=image/format,png)
主要输出的对象:
1)ReceiverList, BroadcastFilter,
2)IntentResolver,
3)BroadcastQueue, BroadcastRecord
4)Handler, Looper
2.3 provider
![](https://i-blog.csdnimg.cn/blog_migrate/ee79903160cba2cdcf715fc2e4a4cd99.webp?x-image-process=image/format,png)
主要输出的对象:
1)ProviderMap
2)ContentProviderRecord, ContentProviderConnection
2.4 permissions
![](https://i-blog.csdnimg.cn/blog_migrate/ab68d86c30e7e0ae091fb1b885d89c83.webp?x-image-process=image/format,png)
主要输出的对象:
1)UriPermission
2.5 Service
![](https://i-blog.csdnimg.cn/blog_migrate/f0b3663678cf76b4d9a74a373c0f0df1.webp?x-image-process=image/format,png)
主要输出的对象:
1)ActiveServices,
2)ServiceRecord, ConnectionRecord,ProcessRecord
2.6 recents
![](https://i-blog.csdnimg.cn/blog_migrate/96673707fb55e1c872c1ab1c0b24f982.webp?x-image-process=image/format,png)
主要输出的对象:
TaskRecord
2.7activities
![](https://i-blog.csdnimg.cn/blog_migrate/d2bcaaedf6cd11792abbd6325892c14f.webp?x-image-process=image/format,png)
主要输出的对象:
1)ActivityStackSupervisor, ActivityStack,
2)TaskRecord, ActivityRecord
3)ActivityThread, Activity
4)ViewRootImpl
5)Looper, MessageQueue
2.8 processes
![](https://i-blog.csdnimg.cn/blog_migrate/4d1664761c35b5524ee82e5f3edfa130.webp?x-image-process=image/format,png)
主要输出的对象:
1)AMS各种进程对象
2)ProcessRecord, UidRecord
3 dumpsys 使用
adb shell dumpsys,默认打印出当前系统所有service信息,在后面可加上具体的服务名
需要列出当前运行的服务,可运行:
adb shell dumpsys | findstr DUMP
下面简单列下我用到的一些命令...(在编写脚本时需要获取一些状态值供判断用)
获取设备分辨率:
adb shell dumpsys display | findstr DisplayDeviceInfo
DisplayDeviceInfo{"内置屏幕": 1080 x 1920, 55.0 fps, density 480, 464.949 x 468.923 dpi...
获取设备电池信息:
adb shell dumpsys battery
Current Battery Service state:
AC powered: false
USB powered: true
Wireless powered: false
status: 2 #电池状态
health: 2
present: true
level: 34 #电量
scale: 100
voltage: 3848
current now: -427943
temperature: 280 #电池温度
technology: Li-ion
获取cpu信息:
adb shell dumpsys cpuinfo
获取内存信息:
adb shell dumpsys meminfo
要获取具体应用的内存信息,可加上包名
adb shell dumpsys meminfo PACKAGE_NAME
获取Activity信息:
adb shell dumpsys activity
加上-h可以获取帮助信息
获取当前界面的UI信息,可以用:
adb shell dumpsys activity top
要获取当前界面的Activity:
adb shell dumpsys activity top | findstr ACTIVITY
获取package信息:
adb shell dumpsys package
加上-h可以获取帮助信息
获取某个包的信息:
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=农业部:中国超级稻亩产超1吨
android.subText=null
android.showChronometer=false
android.icon=2130837941
android.text=农业部今日通报称,经专家测产,袁隆平领衔培育的中国“超级稻”亩产过千公斤,创造1026.7公斤新纪录。详情>>
android.progress=0
android.progressMax=0
android.showWhen=true
android.infoText=null
android.progressIndeterminate=false
android.scoreModified=false
}
获取wifi信息:
adb shell dumpsys wifi
可以获取到当前连接的wifi名、搜索到的wifi列表、wifi强度等
获取电源管理信息:
adb shell dumpsys power
可以获取到是否处于锁屏状态:mWakefulness=Asleep或者mScreenOn=false
亮度值:mScreenBrightness=255
屏幕休眠时间:Screen off timeout: 60000 ms
屏幕分辨率:mDisplayWidth=1440,mDisplayHeight=2560
等
获取电话信息:
adb shell dumpsys telephony.registry
可以获取到电话状态,例如
mCallState值为0,表示待机状态、1表示来电未接听状态、2表示电话占线状态
mCallForwarding=false #是否启用呼叫转移
mDataConnectionState=2 #0:无数据连接 1:正在创建数据连接 2:已连接
mDataConnectionPossible=true #是否有数据连接
mDataConnectionApn= #APN名称