Dumpsys结构图:
实现方式:
dumpsys的代码在mydroid/frameworks/base/cmds/dumpsys/dumpsys.cpp,所有的dump信息都是由重载了Binder中的dump函数的类来完成:
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
...
}
代码很简单,发现所有dump的信息都是由defaultServiceManager)提供的由系统注册的所有service来提供信息。
以meminfo为例:
它是在
mydroid/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中的setSystemProcess函数处被注册的
SrviceManager.addService("activity", m);
ServiceManager.addService("meminfo", new MemBinder(m));
...
MemBinder->ProcessRecord->各个正在运行状态的ApplicationThread的状态(mydroid/frameworks/base/core/java/android/app/ActivityThread.java),从中得到需要的meminfo信息。
这其中其实牵涉到负责的Android的是如何管理Linux的进程,同时又是如何把Linux的进程管理起来提供各种信息给Java层使用。
上述信息来自网络:
https://www.google.com.hk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCEQFjAB&url=http%3A%2F%2Ffreshui-player.googlecode.com%2Fsvn%2Fbranches%2Fdocs%2Fandroid_tools%2FAndroid%25E7%25B3%25BB%25E7%25BB%259F%25E5%2588%2586%25E6%259E%2590%25E5%25B7%25A5%25E5%2585%25B7-dumpsys.doc&ei=XHftU5WaOIPn8AWsn4HADw&usg=AFQjCNHK3eJPxr5jB07Di96dlBqStTrtdg&bvm=bv.73231344,d.dGc
具体命令行参数:
1、 SurfaceFlinger
SurfaceFlinger是Android进行图形界面绘制的服务,根据文档显示,有硬件绘制和GPU绘制两种实现方式。
(来源:http://blog.csdn.net/windskier/article/details/7030732 )
通过dumpsys SurfaceFlinger,除了可以看到显示设备的一些参数开关之外,还能能到如下,360手机卫士主界面是硬件方式绘制的。
另外,还能看到命令行运行时候,手机系统上所有layer信息,如下所示:
关于这部分主要参考:
http://www.linuxgraphics.cn/android/graphics_system.html
http://stackoverflow.com/questions/21642734/how-to-make-sense-of-dumpsys-surfaceflinger
http://blog.csdn.net/windskier/article/details/7030732
2、 Cpuinfo
可以显示每个进程在内核空间和用户空间的cpu占用率
3、 Account
设备上所有用户信息
4、 Activity
-h:显示参数列表
A(activities)参数:查看activity组件信息,主要看从” Running activities (most recent first):”部分查看栈中的activity列表。
B(broadcasts)参数:查看所有注册的BraodcastReceiver及其filter、action等信息。
I(Intents)参数:等待的intent状态
P(processes)参数:ProcessRecord记录的进程id、进程名字和各种用于调节优先级的状态。
O(oom)参数:主要看oom_adj值,从中可以看到到内存释放的情况。
Prov(providers)参数:显示content providers信息
s(Services)参数:当前active状态的service及bindings信息。
services[]参数:跟上具体的服务名,dump出服务客户端的一些状态信息。
5、 Alarm
查看放到定时队列中的事件。
例如下面我们可以看到其intent ID。
而通过” dumpsys activity i”我们可以看到该intent所对应的详细信息。
6、 appwidget
android窗口小部件的信息。
7、 audio
android音频组件信息
8、 backup
android backup服务信息
9、 battery
android电池设备信息
10、 batteryinfo
android耗电相关的进程运行时间等信息(可能api level 19以上被batterystats取代)。
11、 connectivity
android网络连接状态及进程请求网络信息。
12、 content
查看android content provider相关的信息
13、 device_policy
android设备政策。
14、 diskstats
手机卡剩余信息
15、 dropbox
系统崩溃的信息
16、 input_method
Android输入法信息
17、 iphonesubinfo
手机制式及设备id
18、 location
gps等位置信息
19、 media.audio_flinger、media.audio_policy、media.camera、media.player
android音视频设备有关的状态信息
20、 meminfo
android进程实际物理内存占用情况。
http://zarroboogs.org/index.php/archives/218
21、 mount
加载的存储设备信息
22、 network_management
android网络流量管理信息
23、 notification
android通知栏广告信息。
24、 package
参数:
我们主要通过l、perm、perf、p等参数dump出package信息,还能够直接跟包名来dump出该包的具体信息。
25、 power
电源管理器的一些状态信息。
26、 sensorservice
android传感器的一些状态信息。
27、 statusbar
显示状态栏相关的一些信息。
28、 telephony.registry
电话服务相关的信息。
29、 uimode
ui mode service的状态信息。
30、 usagestats
各个app使用情况统计
31、 wallpaper
壁纸信息
32、 wifi
wifi连接及状态信息
33、 window
参数: