博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android性能测试工具dumpsys命令的用法
阅读量:4283 次
发布时间:2019-05-27

本文共 3772 字,大约阅读时间需要 12 分钟。

android性能测试工具之dumpsys
 

补记: 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的进程管理起来提供各种信息给层使用。

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

摘自 
Melody_lu123

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

这是一个很好用的工具,在adbshell下可以使用,主要用来获取一些系统service的信息,也可以对这些服务做一些简单的控制。

首先是获得哪些service信息可以dump

  1. $ adb shell dumpsys | grepDUMP
  2. 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:
    ....

然后就是具体获取某个服务的信息,比如电池使用信息:

  1. $ adb shell dumpsysbatteryinfo

比如抓某个package的进程的memory使用情况:

  1. $ adb shell dumpsys meminfoYourPkg

再比如测试wifi功能,写个script脚本:

  1. $ adb shell svc wifienable  # disable对应禁用wifi
  2. $ adb shell sleep 4
  3. $ adb shell dumpsys wifi >wifiEnable.txt

如果dumpsys不能用,检查你的manifest.xml是不是加了这个permission:

  1. 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.MAINcat=[android.intent.category.LAUNCHER] flg=0x10000000cmp=com.leaves.ipanel/.MainActivity }
     Hist #2: ActivityRecord{4265b1b0 u0com.leaves.ipanel/.ActivityA}
       Intent { act=com.leaves.ipanel.ActivityA flg=0x20000000cmp=com.leaves.ipanel/.ActivityA }
       ProcessRecord{4292a550 2115:com.leaves.ipanel/u0a10061}
     Hist #1: ActivityRecord{42485758 u0com.leaves.ipanel/.MainActivity}
       Intent { act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER] flg=0x10000000cmp=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=0x10600000cmp=com.android.launcher/com.android.launcher2.Launcher }
     Hist #0: ActivityRecord{4291c7b0 u0com.android.launcher/com.android.launcher2.Launcher}
       Intent { act=android.intent.action.MAINcat=[android.intent.category.HOME] flg=0x10000000cmp=com.android.launcher/com.android.launcher2.Launcher }
       ProcessRecord{4267f0b8 636:com.android.launcher/1000}

 

转载地址:http://tpngi.baihongyu.com/

你可能感兴趣的文章
C语言 static静态变量的作用
查看>>
Linux(C/C++)下的文件操作open、fopen与freopen
查看>>
C语言 文件操作的头文件
查看>>
C语言的常用库函数(dos)之四(dir.h文件下的一些函数)
查看>>
warning: jobserver unavailable: using -j1. Add `+' to parent make rule问题怎么解决
查看>>
防火墙报文转发流程
查看>>
以太坊创始人:17岁的亿万富翁养成记
查看>>
linux下IPTABLES配置详解
查看>>
关于iptables -m选项以及规则的理解
查看>>
linux系统中查看己设置iptables规则
查看>>
一些库函数的使用注意事项
查看>>
IPv6地址自动配置中的有状态(stateful)和无状态(stateless)的区别
查看>>
阿里云 ACP 云安全 题库总结
查看>>
阿里云 ACP 云安全 题库 -- 数据库审计部分
查看>>
GC 回收机制
查看>>
探究 Android MVC、MVP、MVVM 的区别以及优缺点
查看>>
深入分析 Handler 内存泄露
查看>>
解决 windows 文件被占用的问题 -- The action can‘t be completed because the folder is open in another program
查看>>
Tencent/matrix错误:Cause: need sign apk but apksigner *\Sdk/build-tools/*/apksigner was not exist
查看>>
Android6.0运行时权限详解
查看>>