come from : https://www.cnblogs.com/justin-y-lin/p/5424598.html
dumpsys
【用途】Android系统提供的dumpsys工具可以用来查看系统服务信息与状态。
【使用说明】
adb shell dumpsys <service> [<option>]
【常用服务解释】
编号 | 服务名称 | 功能 |
1 | account | 显示accounts信息 |
2 | activity | 显示所有的activities信息,包括activity栈,栈顶activity等 |
3 | cpuinfo | 显示CPU信息,系统各进程的CPU使用率 |
4 | window | 显示键盘、窗口和他们的关系。获取当前应用的component |
5 | wifi | 显示wifi信息 |
7 | package | 获取安装包信息 package $package_name |
8 | usagestats | 每个界面的启动时间 |
9 | statusbar | 显示状态栏相关的信息 |
10 | meminfo | 显示内存信息。meminfo $package_name or $pid显示指定程序内存信息 |
11 | diskstats | 显示磁盘相关信息 |
12 | battery | 显示电池信息 |
13 | alarm | 显示应用持锁情况,可用于分析系统无法待机的问题以及应用层死锁问题 |
14 | input | 显示InputReader和InputDispatcher消息队列,底层事件一般通过inputevent的方式上报,通过查看消息队列,可以判断冻屏时内核是否正常(adb shell setprop sys.input.debug 1打开debug信息) |
【代码实现】
dumpsys代码在frameworks/base/cmds/dumpsys/dumpsys.cpp
所有dump信息都是由重载了Binder的dump函数的类来完成:
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args){
//TODO: xxxx
}
所有dump信息都是由ServiceManager注册的services提供的,以meminfo为例:
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中的setSystemProcess函数中注册meminfo服务:
ServiceManager.addService(“activity”, m);
ServiceManager.addService(“meminfo”,new MemBinder(m));
MemBinder->ProcessRecord->各个正在运行状态的ApplicationThread的状态(frameworks/base/core/java/android/app/ActivityThread.java),从中得到需要的meminfo的信息。