Android-专项测试(2)
4.10.过度绘制【完成】
过度绘制的概念:
过度绘制(Overdraw)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次的UI结构里面,如果不可见的UI也在做绘制的操作,这就会导致某些像素区域被绘制了多次。这就浪费大量的 CPU 以及 GPU 资源。
首先,我们从定义来分析,这里有几个关键词:“某个像素”、“同一帧”、“绘制多次”、“多层”、“不可见UI"。那么我们其实根据这些关键词,可以分析出一些结论:
1.过度绘制是同一个像素点,被绘制了多次造成的。
2.浪费大量的 CPU 以及 GPU 资源。
3.过度绘制通常由于 UI 层次比较多,并且在同一个区域,不可见的 UI 和可见 UI 同时参与了绘制。
4.UI 层次很多,不一定有过度绘制,它们之间没有必然联系。但层次过度会影响测量布局等阶段,同样会造成丢帧、卡顿等性能问题。
在android中之所以要关注过度绘制,是因为从性能数据上看我们能发现,对于计算逻辑不重的客户端来说,其cpu的消耗大部分在renderThread上(android中用于做渲染的线程)
过度绘制也会造成丢帧、卡顿等性能问题。
因此对过度绘制的探索 能帮助我们进一步优化cpu以及gpu的使用。
测试方法:
开发者选项,打开”调试 GPU 过度绘制“(Show GPU Overdraw)的选项,在打开的选择项中,可以选择“显示过度绘制区域”,这样就可以观察 UI 界面上的过度绘制情况了。
如图,过度绘制分为4个级别,分别用一种颜色来表示:
1.蓝色:代表同一个像素点多绘制了1次。
2.淡绿:代表同一个像素点多绘制了2次。
3.淡红:代表同一个像素点多绘制了3次。
4.深红:代表同一个像素点多绘制了4次以上。
我们的目标就是尽量减少红色区域,看到更多的蓝色区域。
4.11.极端测试场景【完成】
在android系统中当系统资源不足时会进行资源的回收,尤其是当系统发生oom之后。
有时候在极端场景下app的健壮性也十分影响用户体验。那这些极端场景主要可以通过如下2种手段进行模拟。
4.11.1.不保留活动
在android的开发者选项中有一个【不保留活动】的配置项,该配置项开启后在离开当前的activity之后就会触发activity的destroy方法,再次打开该activity时会执行oncreate方法。
例如,在我们自己项目的测试过程汇总,发现2个问题:
问题1:在登录弹窗隐私协议同意弹窗出现之后置于后台,然后再唤起到前台,此时隐私协议弹窗却变成了一个空白的设置页弹窗;
问题2:在搜索页搜索之后切换到其他页面之后会再次唤起弹窗。
上述问题均是由代码设计不严谨导致。
4.11.2.低内存&低cpu模拟
https://blog.csdn.net/jinron10/article/details/85325931
在这些极端的场景下面,如果应用的确需要这么多资源,那么这种极端的场景肯定是会有问题在整体功能层面上。所以一方面要尽可能优化app的资源使用情况,另外一方面重点要考量的是在资源回复之后app功能不能出现异常。
在此场景下「可恢复」才是我们重点要考量的内容。
比如之前,在车载测试过程中偶遇到以下的两个问题:
问题1:
原因:是系统在内存不足的时候杀掉了B站的ijk进程,又自动拉起了这个进程,导致播放,后续我们会给一个修复的包测试。
测试方法:
Ram内存填充:memtester 3000M 1
Rom内存填充:
adb root adb shell df 查看/mnt/user/0/emulated剩余 adb shell
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏专注于对复杂项目对测试用例编写思路、接口自动化测试用例以及自定义接口测试框架及工具对实现。