1 系统监控常用ADB命令
- 查看应用启动耗时
adb-s *设备id shell am start -W -n 应用名.app/ .MainActivity
- 获得电池电量和电池温度
adb shell dumpsys battery
- 获得最耗资源的应用
adb -s ***设备id *** shell top -m 6 -n l -s cpu
- 获得内存使用情况
adb -s 设备id adb shell dumpsys meminfo 应用程序包名
- 获取指定程序cpu使用情况
adb -s 设备id shell dumpsys cpuinfo 应用程序包名
- 获取指定程序PID
adb shell “ps | grep packageName”
2 需要功能
- 检测当前时间被测应用的CPU使用率 以及 总体CPU使用量。
- 检测当前时间被测应用占用的内存量、百分比,剩余内存量。
- 检测应用从启动开始到当前时间消耗的流量数。
- 测试数据写入到CSV文件中,存储在手机/storage/sdcard0目录下,同时支持以邮件形式发送文件。
- 可以选择开启浮窗功能,浮窗中实时显示被测应用占用性能数据信息。
- 在浮窗中可以快速启动或者关闭手机的wifi网络。
3 实现原理
- 监控CPU的实现原理
Android系统是基于Linux内核的,所以系统文件的结构和Linux下一样,系统总体CPU使用信息放在/proc/stat文件下,/proc/cpuinfo文件存放CPU的其它信息,包括CPU名称,直接读取即可。Emmagee是将选中应用的PID传入,读取/proc/PID/stat文件信息及可获取该PID对应程序的CPU信息。 - 监控内存的实现原理
内存和cpu的处理方式类似。先获取到当被测应用的PID,然后按照PID从 /proc/meminfo文件中获取当前被测应用占用的内存信息。 - 监控流量消耗的实现原理
系统中有存放整体流量和针对当程序的流量统计,/proc/net/dev和/proc/uid_stat/UID下存放tcp_rcv和tcp_send文件,分别存放下行流量和上行流量,操作前后相减就得出结果 。 - 监控电量的实现原理
电量、电压和温度情况是通过监听系统的电池管理事件的广播来获取的。 - 监控启动时间的实现原理
我们点击界面的开始测试时,程序会启动,之后所有的数据统计以及更新进行处理的。会在onStartCommand()里面启动一个线程“handler.postDelayed(task, 1000)”,进行数据的更新同时会尝试通过ActivityManger从logcat中获取到软件的启动时间。
红色框框内的东西就是通过调用一个管理Android帧缓冲区的系统服务SurfaceFlinger来获取用于计算fps的帧数据,具体可参考:Android fps的计算方式。