补记: 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层使用。


同时,也有一些dumpsys里面显示的内容,可以通过settings这个app来控制,比如一些developments的选项,可以控制dumpsys获得一些对开发者更有意义的信息。


总之,关键还是package的管理和它的活动周期的管理问题。值得深入理解。



更多相关文章

  1. Android注册设备管理器(获取超级管理员权限)
  2. Android高效显示图片详解(三)
  3. android弹窗对话框中间使用自定义view
  4. android调用系统相机拍照保存照片并显示在当前界面
  5. android输入设备相关文件
  6. Android(安卓)请求网络loading 结果显示error empty界面
  7. Android模仿新浪微博(个人信息界面及其他)
  8. 【Fragment使用】(二)Android之取消ViewPage+Fragment的预加载
  9. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

随机推荐

  1. Android服务端开发1-使用Eclipse搭建Java
  2. java高并发synchronized学习
  3. #研究JAVAAPI系列--Number类+BigDecimal
  4. 如何使用Thymleaf做到这一点?
  5. Python探究之旅—Python语言的基本认识
  6. 如何在Apache POI(java)中读取.docx中的字
  7. 怎么在html,Javascript,vBscript中实现从
  8. Java多线程之Thread、Runnable、Callable
  9. BufferedImage到InputStream - 格式不同
  10. 20145122《 Java网络编程》实验五实验报