adb shell dumpsys cpuinfo |grep packageName >/address/cpu.txt
大家看第一个应用CPU占用率68%,这个过程是在用户(user)中花61%的时间,并在内核空间(kernel)花费7.1%的时间。
或者:
adb shell top |grep packagename>/address/cpu.txt
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
1.空闲状态下的应用内存消耗情况
2.中等规格状态下的应用内存消耗情况
3.满规格状态下的应用内存消耗情况
4.应用内存峰值情况
5.应用内存泄露情况
6.应用是否常驻内存
7.压力测试后的内存使用情况
大量的对象在短时间创建和释放,频繁触发GC,造成UI卡顿; 避免在循环体中new对象 String 和StringBuffer例子 避免在FrameCallback.doFrame()方法中new对象 重用对象 e.g 字符串拼接使用StringBuff
程序中一些对象不再使用,但是一直被该对象的引用所持有,导致GC无法回收。
Activity泄露:Activity Drawable
Fragment泄露
1.使用 android 本身提供的 ActivityManager.MemoryInfo() 方法获得(此方法请百度或google)此类第三方工具有如网易的Emmagee、安测试、腾讯的GT等
private void GetMemory() {
final ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(info);
Log.i(tag,"系统剩余内存:"+(info.availMem >> 10)+"k");
Log.i(tag,"系统是否处于低内存运行:"+info.lowMemory);
Log.i(tag,"当系统剩余内存低于"+info.threshold+"时就看成低内存运行");
}
availMem:表示系统剩余内存
lowMemory:它是boolean值,表示系统是否处于低内存运行
hreshold:它表示当系统剩余内存低于好多时就看成低内存运行
我用过以上三种最多,其实Top 也可以 还有很多方法都可以。
2.使用 android 提供的 adb shell dumpsys 命令来获取
adb shell dumpsys meminfo |grep packagename >/address/mem.txt
3.使用 android 提供的 procrank
首先去google获取procrank、procmem、libpagemap.so 三个文件 ;
然后push文件,执行
adb push procrank /system/xbin adb push procmem /system/xbin adb push libpagemap.so /system/lib
赋权
adb shell chmod 6755 /system/xbin/procrank adb shell chmod 6755 /system/xbin/procmem adb shell chmod 6755 /system/lib/libpagemap.so
在开启工具记录
adb shell procrank |grep packagename >/address/procrank.txt
对于内存的限制 是 dalvik heap不能超过最大限制,跟Native heap没有关系。
流量测试包括以下测试项:
1.
adb shell cat /proc/”+Pid+”/net/dev”
这边的wlan0代表wifi 上传下载量标识! 上传下载量单位是字节可以/1024换算成KB
这里可以看到下载的字节数 、数据包 和 发送的字节数 、数据包
小技巧:wlan0这些值如何初始化0 很简单 你打开手机飞行模式再关掉就清0了
2.
通过直接读取android系统上的两个文件的内容:
Proc/uid_stat/{UID}/tcp_snd和tcp_rcv,其中UID是每个app安装时分配的唯一编号用于识别该app,tcp_snd中的数据表示法术的数据累计大小,单位是字节,tcp_rcv表示接收到的数据累计大小。
(1)首先获取app的PID:
adb shell ps |grep packageName
(2)然后获取app的UID
adb shell cat /proc/”+Pid+”/status
(3)获取到应用的起始的接收及发送的流量
adb shell cat /proc/uid_stat/+”UID”/tcp_rcv
adb shell cat /proc/uid_stat/+”UID”/tcp_snd
然后我们再操作应用,再次通过上述 2 条命令可以获取到应用的结束的接收及发送的流量,通过相减及得到应用的整体流量消耗
功耗测试主要从以下几个方面入手进行测试
测试手机安装目标APK前后待机功耗无明显差异
常见使用场景中能够正常进入待机,待机电流在正常范围内.
长时间连续使用应用无异常耗电现象
测试方法
第一种基于android提供的PowerManager.WakeLock来进行,
第二种比较复杂一点,功耗的计算=CPU消耗+Wake lock消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗,
第三种通过 adb shell dumpsys battery来获取
Android性能测试-启动时间:
首先我们来说说启动时间。关于应用的启动时间的测试,分为三类:
1) 首次启动 –应用首次启动所花费的时间
2) 非首次启动 –应用非首次启动所花费的时间
3) 应用界面切换–应用界面内切换所花费的时间
那么如何来做启动时间的测试呢,一般我们分为2类,一类为使用软件来测试,可能大部分人都比较通晓使用android 提供的 DisplayManager 来获取 activity 的启动时间。通过日志过滤关键字 Displayed 来过滤所有 activity 所打印的,记录日志通过。