这里说一下常用的客户端性能的基础知识:
1、内存
内存出现瓶颈一般是内存过大会导致APP在低端设备上导致闪退现象,另外就是内存泄漏导致内存暴涨这两个方面的问题。
针对这两个问题,第一个问题主要是确保APP能够兼容更低端的设备上也能健康运行,因此APP的运行内存尽可能低对低端设备会更友好。这个一般要有个阈值,最好不出现内存过高的情况,如果超过阈值了(一般根据APP自身的情况而定,比如游戏这块2D游戏一般不要超过550M),为什么这样设定呢?因为考虑到低端设备比如2G运行内存的设备,它本身可用的运行内存就几乎在1G左右了,如果APP的运行内存过大的话,比如说一个APP的运行内存在8~900M的话,那么这个APP在低端设备下是很容易闪退的,因为Android或者iOS操作系统里面有安全机制,在APP的运行内存过高,导致系统可用内存过低的时候,为了不影响手机系统的运行,操作系统会直接杀死当前运行的APP来保证手机的正常运行的。也就是我们说的内存过高导致闪退的情况。一般跑是跑时间相对较长一段时间,看内存峰值是不是很高,均值是不是在一个相对稳定的预期区间内。
第二个问题是内存泄漏,这个严重性就不言而喻了。那么一般是怎么样判断是否出现内存泄漏呢,第一种手段是用adb命令查看内存情况,具体请参考:Android性能分析之内存黑盒分析方法
第二种手段就比较难一点,是通过Android studio进行profiler来查看是否出现内存泄漏。Android studio profile的使用请参考:hprof分析内存泄漏
另外一个点也需要注意,就是内存回收策略需要弄清楚,所谓知己知彼百战百胜,要测好内存,就要了解其原理。内存回收策略也就不能忽略。一般程序为了运行快一些,都会做一些缓存,那么缓存里面什么时候释放,要缓存哪些数据?这就需要去衡量安全运行与卡顿方面的性价比,在保证运行安全的情况下,运行缓存一些核心数据来提升再次访问速度。
2、CPU
CPU的分析主要是分析APP的逻辑处理性能问题,这块一般是代码逻辑出现了瓶颈,导致APP运行卡顿、ANR、卡死等情况。要分析代码逻辑里面是那些功能出现瓶颈,可以使用Android studio进行profile查看CPU进程的火焰图。至于Android studio该如何profile,这里就不多说了,网上随便一查就有的是。
3、帧率(流畅度)
帧率主要影响APP流畅度、一般帧率不能低于60帧,现在市面上的设备大部分满帧就是 60帧。如果帧率低了,那是什么原因导致的呢?一般情况下,APP的瓶颈就是CPU瓶颈了导致帧率偏低了。而CPU方面除了上面第2点外,还有个不能忽视的就是频繁调用GC,我们知道,内存回收过程是需要调用GC的,如果频繁的调用GC,CPU占用就过高了,也是非常容易导致卡顿掉帧的现象。一般可以通过打log看adblogcat来看就知道是不是有频繁调用GC的情况。
4、网络
网络也是能影响性能的一个因素。网络可能会导致数据请求延迟,报错、设置闪退等现象,常规的弱网测试就一个比较好的手段。
弱网的相关资料参考:弱网测试探索、使用Network Emulator做弱网测试