android性能测试工具之dumpsys
发布日期:2021-06-30 18:50:58 浏览次数:2 分类:技术文章

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

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

这是一个很好用的工具,在adb shell下可以使用,主要用来获取一些系统service的信息,也可以对这些服务做一些简单的控制。首先是获得哪些service信息可以dump$ adb shell dumpsys | grep DUMPDUMP 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:....然后就是具体获取某个服务的信息,比如电池使用信息:$ adb shell dumpsys batteryinfo比如抓某个package的进程的memory使用情况:$ adb shell dumpsys meminfo YourPkg再比如测试wifi功能,写个script脚本:$ adb shell svc wifi enable  # disable对应禁用wifi$ adb shell sleep 4$ adb shell dumpsys wifi > wifiEnable.txt如果dumpsys不能用,检查你的manifest.xml是不是加了这个permission: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.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }     Hist #2: ActivityRecord{4265b1b0 u0 com.leaves.ipanel/.ActivityA}       Intent { act=com.leaves.ipanel.ActivityA flg=0x20000000 cmp=com.leaves.ipanel/.ActivityA }       ProcessRecord{4292a550 2115:com.leaves.ipanel/u0a10061}     Hist #1: ActivityRecord{42485758 u0 com.leaves.ipanel/.MainActivity}       Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=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=0x10600000 cmp=com.android.launcher/com.android.launcher2.Launcher }     Hist #0: ActivityRecord{4291c7b0 u0 com.android.launcher/com.android.launcher2.Launcher}       Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }       ProcessRecord{4267f0b8 636:com.android.launcher/1000}

转载地址:https://linus.blog.csdn.net/article/details/115725715 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Linux中,文件创建的时间是怎么保存的?
下一篇:项目实战,平均负载过高,最后发现却是这个搞鬼

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月06日 04时40分57秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【深度学习笔记】PixelShuffle 2019-04-30
【python3学习笔记】斜杠和双斜杠运算符的区别 2019-04-30
【深度学习笔记】torch.nn.Sequential(* args) 与 torch.nn.Module 2019-04-30
【深度学习笔记】用torch.nn.Sequential()搭建神经网络模型 2019-04-30
【深度学习笔记】用torch.nn.ModuleList搭建神经网络 2019-04-30
【解决错误】AttributeError: module ‘scipy.misc‘ has no attribute ‘imread‘ 2019-04-30
【解决错误】复现RCAN的时候遇到了ImportError: cannot import name ‘_update_worker_pids’ from ‘torch._C’ 2019-04-30
【解决错误】ModuleNotFoundError: No module named ‘skimage‘ 2019-04-30
【深度学习笔记】pytorch的点乘(dot product) 2019-04-30
【深度学习笔记】残差 2019-04-30
【错误解决】cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\sr 2019-04-30
【python学习笔记】读取指定文件夹中的图片,结合边缘保留滤波EPF 2019-04-30
【工具和环境】Linux下安装pycharm 2019-04-30
【Accumulation】The last two sentences of the abstract 2019-04-30
【Accumulation】The definition of SISR 2019-04-30
【工具与环境】Windows下安装Sublime Text 3 2019-04-30
【解决错误】ValueError: some of the strides of a given numpy array are negative. 2019-04-30
【工具与环境】Excel中批量插入行 2019-04-30
【个人实验注意事项】 2019-04-30
【解决错误】ModuleNotFoundError: No module named ‘tqdm‘ 2019-04-30