1、dumpsys简介
Android提供的dumpsys工具可以用于查看感兴趣的系统服务信息与状态,ADB或者串口连接设备后可以直接命令行执行adb shell dumpsys 查看系统信息。
2、dumpsys使用
$ dumpsys | grep "DUMP OF SERVICE"
由此可知,该命令打印出的是系统当前的所有正在运行的服务的信息。
从上面可以看出Service非常多,“DUMP OF SERVICE”关键字后面的单词都可以直接通过 “dumpsys + 单词 ”查看相关信息,具体每一个如何使用有一种通用的查看帮助的办法。
查看每一个命令的使用帮助,以下以meminfo 为例演示:
每个服务信息之间使用横线间隔。
在开发过程中, 使用dumpsys一个常用的用途是查看ActivityManagerService服务的信息。 下面分析ActivityManagerService。 该服务的信息从下面一行开始:
整个ActivityManagerService分为如下部分进行统计显示。不同Android版本会有所差异。
$ dumpsys activity intents
每个待处理的intent在ActivityManagerService内部使用一个PendingIntentRecord对象表示,并且会显示出所在应用的包名,并且会指定该intent是用来发送广播,启动activity或是启动service。
$ dumpsys activity broadcasts
首先会列出系统中所有注册的广播接收者:
$ dumpsys activity broadcasts
$ dumpsys activity broadcasts
之后列出的是位于后台的历史广播:
$ dumpsys activity providers
provider相关的信息。由输出信息可知, 在ActivityManagerService中,一个provider组件使用一个ContentProviderRecord对象表示。
dumpsys activity services 是显示每个service的信息:
ACTIVITY MANAGER RECENT TASKS列出了最近打开的Task的信息,最上面的Recent #0是最新打开的Task信息,下面依次为更早时候打开的Task的信息(这里仅仅是粗略的activity task信息,详细信息通过tid在后面显示 )
ACTIVITY MANAGER ACTIVITIES列出了每个task的详细信息,即这个Task包含哪些Activity,他们的显示顺序是什么样的等等。上图中,id为269的task只包含1个Activity:StickySiloStubActivity
示例:如何通过dumpsys看广播是否发出和是否处理过
dumpsys window查看当前界面所在应用
mCurrentFocus是当前可以获得焦点的window,mFocusedApp是可以拿到焦点的app,这两个不一定是在一个包内
查看电视当前所包含的window
从下往上是window层级由高到低
window层级数值在/framwworks/base/core/java/android/view/WindowManager.java中定义
dumpsys package + 包名,查看应用相关信息:
activity信息、注册广播信息、权限、版本、ContentProvider信息、apk包的信息
例如:
dumpsys meminfo + 包名,查看应用占用内存情况
dumpsys meminfo --oom,查看应用内存层级
dumpsys gfxinfo + 包名,查看应用丢帧情况
dumpsys cpuinfo,查看电视当前cpu使用情况,也可以直接用top命令查看当前cpu的使用情况。
dumpsys activity activities,可以查看电视当前activity stack 情况。也可以使用am stack list查看stack信息