灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:1898回复:0

android性能测试工具之dumpsys

楼主#
更多 发布于:2012-09-06 13:49


记: 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

喜欢0 评分0
游客

返回顶部