补记: MAT(memory analyzer tool )是google 推荐的进行内存使用量分析的工具. 功能全面而强大!!!
首先看一下dumpsys有哪些功能:
 dumpsys 用来给出手机中所有应用程序的信息,并且也会给出现在手机的状态。
 dumpsys [Option]
 meminfo 显示内存信息
 cpuinfo 显示CPU信息
 account 显示accounts信息
 activity 显示所有的activities的信息
 window 显示键盘,窗口和它们的关系
 wifi 显示wifi信息
从我的G14中可以看到它从以下service获得所有的信息
 Currently running services:
 SurfaceFlinger
 accessibility
 account
 activity
 alarm
 appwidget
 assetredirection
 audio
 backup
 battery
 batteryinfo
 bluetooth
 bluetooth_a2dp
 bluetooth_hid
 bluetooth_network
 clipboard
 connectivity
 content
 cpuinfo
 device_policy
 devicestoragemonitor
 diskstats
 dropbox
 entropy
 hardware
 input_method
 iphonesubinfo
 isms
 location
 media.audio_flinger
 media.audio_policy
 media.camera
 media.player
 meminfo
 mount
 netstat
 network_management
 notification
 package
接下来,来看看Android系统是如何实现dumpsys的。
 dumpsys的代码在mydroid/frameworks/base/cmds/dumpsys/dumpsys.cpp
 所有的dump信息都是由重载了Binder中的dump函数的类来完成:
 @Override
 protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
 …
 }
 代码很简单,发现搜有dump的信息都是由defaultServiceManager(关于Android的ServiceManager的结构分析参见我之后的一篇文章)提供的由系统注册的所有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层使用。总之,关键还是package的管理和它的活动周期的管理问题。值得深入理解。
摘自 Melody_lu123
这是一个很好用的工具,在adb shell下可以使用,主要用来获取一些系统service的信息,也可以对这些服务做一些简单的控制。首先是获得哪些service信息可以dump$ adb shell dumpsys | grep DUMP
DUMP OF SERVICE AtCmdFwd:
DUMP OF SERVICE SurfaceFlinger:
DUMP OF SERVICE accessibility:
DUMP OF SERVICE account:
DUMP OF SERVICE activity:
DUMP OF SERVICE alarm:
DUMP OF SERVICE appwidget:
DUMP OF SERVICE audio:
DUMP OF SERVICE backup:
DUMP OF SERVICE battery:
DUMP OF SERVICE batteryinfo:
DUMP OF SERVICE bluetooth:
DUMP OF SERVICE bluetooth_a2dp:
DUMP OF SERVICE clipboard:
....然后就是具体获取某个服务的信息,比如电池使用信息:$ adb shell dumpsys batteryinfo比如抓某个package的进程的memory使用情况:$ adb shell dumpsys meminfo YourPkg再比如测试wifi功能,写个script脚本:$ adb shell svc wifi enable  # disable对应禁用wifi
$ adb shell sleep 4
$ adb shell dumpsys wifi > wifiEnable.txt如果dumpsys不能用,检查你的manifest.xml是不是加了这个permission:android.permission.DUMP~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)Main stack:TaskRecord{438f1ed8 #9 A com.leaves.ipanel U 0}Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }Hist #2: ActivityRecord{4265b1b0 u0 com.leaves.ipanel/.ActivityA}Intent { act=com.leaves.ipanel.ActivityA flg=0x20000000 cmp=com.leaves.ipanel/.ActivityA }ProcessRecord{4292a550 2115:com.leaves.ipanel/u0a10061}Hist #1: ActivityRecord{42485758 u0 com.leaves.ipanel/.MainActivity}Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }ProcessRecord{4292a550 2115:com.leaves.ipanel/u0a10061}TaskRecord{426f4820 #2 A com.android.launcher U 0}Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10600000 cmp=com.android.launcher/com.android.launcher2.Launcher }Hist #0: ActivityRecord{4291c7b0 u0 com.android.launcher/com.android.launcher2.Launcher}Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }ProcessRecord{4267f0b8 636:com.android.launcher/1000}