补记: 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的管理和它的活动周期的管理问题。值得深入理解。

http://blog.csdn.net/melody_lu123/article/details/6777413

更多相关文章

  1. android window 属性
  2. android keyguard锁屏程序不能全屏显示
  3. Notification学习
  4. v7 包下 ActionBar 的一些基本使用
  5. SpannableStringBuilder 和 SpannableString
  6. Android复写BaseAdapter并显示ListView视图
  7. Android的UI显示原理之Surface的渲染
  8. Android:假如给我三天光明,我将彻底搞懂RSSI信号显示问题(RSSI概念
  9. Android应用程序申请系统管理员权限

随机推荐

  1. Android,UI主线程与子线程
  2. Android(安卓)TextView、EditText显示表
  3. 搭建Android开发环境与开发工具选择
  4. Unity3d调用android中的方法
  5. 如果你想用对话框代替一个activity的话,可
  6. android EditText控件自动获取焦点弹出键
  7. Android(安卓)adb 常用技巧
  8. android——彻底关闭——应用程序
  9. 离线安装 Android(安卓)4.0 SDK
  10. Android游戏引擎选择