软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。
验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。
一般在系统功能稳定没有大的缺陷之后开始执行。但前期准备工作可以从系统需求分析时就开始:性能目标制定、场景获取、环境申请等。
CPU,CPU使用率过高,会使整个手机无法响应用户,整体性能降低,影响用户体验,也容易引起ANR等问题。
内存,内存占用偏高,尤其是内存泄露是Android开发者十分关心的问题,因为内存泄露可能导致的后果是应用进程直接被kill掉。
流量,对于APP用户来说,流量=钱,通过流量的实时监测,帮开发者分析应用的资源加载大小、网络请求是否合理。
启动时间,App启动到首页加载完成的耗时,如果太慢,直接导致用户卸载App。
包大小,安装包中资源冗余、文件未做压缩,都将导致APK包偏大,增加下载流量和安装时间。
流畅度,应用的帧率和流畅度是最直接影响用户体验的。通过帧率和流畅度曲线,帮开发者分析是否存在UI问题。
- 布局复杂度:布局复杂会导致布局需要更长的时间,从而导致进入应用慢、页面切换慢;
- 耗电量:耗电量大会导致机器发热、缩短机器的有效使用时长;
- 内存:内存消耗大会导致频繁GC,GC时会暂停其它工作,导致页面卡顿;内存泄露会导致剩余可用内存越来越小;内存不足会导致应用异常;
- 网络:频繁的网络访问会导致耗电和影响应用的性能;网络交互数据大小会影响网络传输的效率;
- 程序执行效率:糟糕的代码会严重影响程序的运行效率,UI线程过多的任务会阻塞应用的正常运行,长时间持有某个对象会导致潜在的内存泄露,频繁的IO操作、网络操作而不用缓存会严重影响程序的运行效率。
一、使用adb命令进行测试:
1.CPU:adb shell top https://blog.csdn.net/cdaron/article/details/81041872
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [-t ] [ -h ]
-m num Maximum number of processes to display. 最多显示多少个进程
-n num Updates to show before exiting. 刷新次数
-d num Seconds to wait between updates. 刷新间隔时间(默认5秒)
-s col Column to sort by (cpu,vss,rss,thr). 按哪列排序
-t Show threads instead of processes. 显示线程信息而不是进程
-h Display this help screen. 显示帮助文档
S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
监测一次微博的CPU占用情况:adb shell top -n 1 | grep com.sina.weibo
10秒刷新一次显示CPU占用情况:adb shell top -d 10 | grep com.sina.weibo
实时监测微博的CPU占用情况:adb shell top |grep com.sina.weibo
硬中断和软中断: