您的位置:首页 > 移动开发 > Android开发

android性能测试工具之dumpsys

2013-03-04 12:41 495 查看
补记: 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的管理和它的活动周期的管理问题。值得深入理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: