dumpsys命令可以dump系统各种服务的状态,因此在平常的开发过程中如果很好的掌握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");
例如可以通过下面的方式来查询当前系统支持的所有dump服务。
adb shell dumpsys -l
借鉴gityuan的博客总结了比较重要的服务对应的类名和功能。
| 服务名 | 类名 | 功能 |
|---|---|---|
| activity | ActivityManagerService | AMS相关信息 |
| package | PackageManagerService | PMS相关信息 |
| window | WindowManagerService | WMS相关信息 |
| input | InputManagerService | IMS相关信息 |
| power | PowerManagerService | PMS相关信息 |
| batterystats | BatterystatsService | 电池统计信息 |
| battery | BatteryService | 电池信息 |
| alarm | AlarmManagerService | 闹钟信息 |
| dropbox | DropboxManagerService | 调试相关 |
| procstats | ProcessStatsService | 进程统计 |
| cpuinfo | CpuBinder | CPU |
| meminfo | MemBinder | 内存 |
| gfxinfo | GraphicsBinder | 图像 |
| dbinfo | DbBinder | 数据库 |
| 服务名 | 功能 |
|---|---|
| SurfaceFlinger | 图像相关 |
| appops | app使用情况 |
| permission | 权限 |
| processinfo | 进程服务 |
| batteryproperties | 电池相关 |
| audio | 查看声音信息 |
| netstats | 查看网络统计信息 |
| diskstats | 查看空间free状态 |
| jobscheduler | 查看任务计划 |
| wifi | wifi信息 |
| diskstats | 磁盘情况 |
| usagestats | 用户使用情况 |
| devicestoragemonitor | 设备信息 |
| … | … |
2. 一些常用场景
-
场景1
当你想要查看当前手机屏幕正在显示的页面是哪个进程的那个activity时,你可以输入
adb shell dumpsys activity top |grep mResumed=true -C 10
WX20181122-181657@2x.png
解读:- grep mResumed=true代表查询当前处于mResumed=true的activity,也就是正在前台展示的Activity;
- Activity为com.ss.android.article.news/.activity.MainActivity,进程名为com.ss.android.article.news,进程pid=20958;
-
场景2
查询某个App所有service状态
adb shell dumpsys activity s com.ss.android.article.news
image.png
解读:- Service名称为
com.ss.android.article.news/com.ss.android.message.NotifyService - 运行在进程
pid=21484进程名为:com.ss.android.article.news:push,uid=u0a158 - Intent信息
intent={cmp=com.ss.android.article.news/com.ss.android.message.NotifyService}
当然还有一些其他的信息,比如packageName,baseDir(apk路径),dataDir(数据存储路径),createTime,callerPackage等各种信息。
- Service名称为
-
场景3
查询某个App的所有Activity状态,其中包括页面的View Hierarchy信息
adb shell dumpsys activity a com.ss.android.article.news
image.png
解读:-
TaskRecord{Hashcode #TaskId Affinity UserId=0 StackId=1 Activity个数=1},从上图中我们可以看到,taskid=3251,Affinity=com.ss.android.article.news,userid=0,stackid=1,activity为1 effectiveUid为当前task所属Uid,mCallingUid为调用者Uid=u0a171,mCallingPackage为调用者包名:com.ss.android.article.newsrealActivity为com.ss.android.article.news/.activity.SplashBadgeActivity
-
-
场景4:查询某个App的进程状态
adb shell dumpsys activity p com.ss.android.article.news
image.png
解读:
- 格式:
ProcessRecord{Hashcode pid:进程名/uid},进程pid=3938,进程名为com.ss.android.article.news,uid=u0a171.
该进程中还有Services,Connections, Providers, Receivers等信息.
当然还有很多其他场景,这里就不一一举例了,大家可以多多尝试,亲自去体验。



