dumpsys activity用法汇总


2020年3月14日11:21:04


一、 概述

1.1 dumpsys 命令用法

可通过 dumpsys 命令查询系统服务的运行状态 (对象的成员变量属性值),命令格式:dumpsys 服务名, 例如:

dumpsys activity 
dumpsys window 
dumpsys cpuinfo 
dumpsys meminfo

可查询的服务有很多,可通过下面任一命令查看当前系统所支持的 dump 服务:

adb shell dumpsys -l
adb shell service list

1.2 系统服务

表一:

服务名 类名 功能
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 设备信息

二、Activity 场景

dumpsys activity,用于查询 AMS 服务相关信息,可跟不同的参数,更多信息见文章 AMS 之 dumpsys 篇

下面以新浪微博 App 作为实例,由于输出结果较多,每个场景截图只挑选部分重要的信息。

场景 1:查询某个 App 所有的 Service 状态

dumpsys activity s com.sina.weibo

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdeTV8no-1584157696901)(http://gityuan.com/images/tools/dumpsys_service.png)]

解读:

  • Service 类名为com.morgoo.droidplugin.PluginManagerService
  • 运行在进程 pid=7220,进程名为com.sina.weibo,uid=10094
  • 通过 bindService 连接该服务的进程 pid=7306,进程名为com.sina.weibo:PluginP03

当然还有 packageName,baseDir(apk 路径),dataDir(apk 数据路径),createTime 等各种信息。另外,新浪微博采用的是 360 开源的 Android 插件机制 (com.morgoo.droidplugin),主要用于 hotfix 等功能。

场景 2:查询某个 App 所有的广播状态

dumpsys activity b com.sina.weibo

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Seq1cipx-1584157696904)(http://gityuan.com/images/tools/dumpsys_broadcast.png)]

解读:

  • android.intent.action.SCREEN_ON 代表手机亮屏广播;
  • 接收该广播的 receiver 有很多个,其中一个所在进程为 pid=7220,进程名为com.sina.weibo

场景 3:查询某个 App 所有的 Activity 状态

输出结果较多,尤其是View Hierarchy,下面截取部分:

dumpsys activity a com.sina.weibo

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hsK9zj1b-1584157696904)(http://gityuan.com/images/tools/dumpsys_activity_task.png)]

解读:

  • 格式:TaskRecord{Hashcode #TaskId Affinity UserId=0 Activity 个数 = 1};所以上图信息解析后就是 TaskId=1802,Affinity=com.sina.weibo,当前 Task 中 Activity 个数为 1。
  • effectiveUid 为当前 task 所属 Uid,mCallingUid 为调用者 Uid=u0a94,mCallingPackage 为调用者包名,这里是com.sina.weibo
  • realActivity:task 中的已启动的 Activity 组件名com.sina.weibo/.SplashActivity

场景 4:查询某个 App 的进程状态

dumpsys activity p com.sina.weibo

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vo5dZUFt-1584157696905)(http://gityuan.com/images/tools/dumpsys_processes.png)]

  • 格式:ProcessRecord{Hashcode pid: 进程名 / uid},进程 pid=7306,进程名为com.sina.weibo:PluginP03,uid=10094.
  • 该进程中还有 Services,Connections, Providers, Receivers,可以看出该进程是没有 Activity 的进程。

其他

还有很多场景,会用到不同的参数,这里就不再一一列举,建议大家多去尝试,慢慢地就更加熟练,再比如:

dumpsys activity top 
dumpsys activity oom

基本使用命令:dumpsys activity -h

Activity manager dump options:
  [-a] [-c] [-p package] [-h] [cmd] ... //这个是后面可以跟的参数
  cmd may be one of: //这个代表可以跟的命令
    a[ctivities]: activity stack state //activity的栈信息
    r[recents]: recent activities state//最新的acivity的信息
    b[roadcasts] [PACKAGE_NAME] [history [-s]]: broadcast state//broadcastsde 相关信息
    i[ntents] [PACKAGE_NAME]: pending intent state//intent的信息
    p[rocesses] [PACKAGE_NAME]: process state//进程相关的信息
    o[om]: out of memory management//内存溢出
    prov[iders] [COMP_SPEC ...]: content provider state//provider信息
    provider [COMP_SPEC]: provider client-side state
    s[ervices] [COMP_SPEC ...]: service state
    as[sociations]: tracked app associations
    service [COMP_SPEC]: service client-side state
    package [PACKAGE_NAME]: all state related to given package
    all: dump all activities //输出所有的activity信息
    top: dump the top activity//输出当前栈顶的activity信息
    write: write all pending state to storage
    track-associations: enable association tracking
    untrack-associations: disable and clear association tracking
  cmd may also be a COMP_SPEC to dump activities.
  COMP_SPEC may be a component name (com.foo/.myApp),
    a partial substring in a component name, a
    hex object identifier.
  -a: include all available server state.
  -c: include client state.
  -p: limit output to given package.

常见的命令使用介绍

1.dumpsys activity top

拿到一个新的 app,我们经常定位当前的焦点 activoty 的名字。
这个命令就可以显示,而且还可以显示包含的 fragment‘的信息、

2.dumpsys activity | grep run

过滤目前的所有的 activity 栈信息。

3.dumpsys activity -p 包名

过滤一个包的信息。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章