对用户来说,使用应用时最希望得到流畅不卡顿的使用体验。而引起卡顿的影响因素有很多,比如:图像绘制、应用启动、页面跳转和事件响应等。软件绿色联盟联合华为终端实验室,对大量应用卡顿现象进行了分析、总结,希望能够为应用开发者提供性能优化建议,共同打造更好的使用体验。
我们将以专题文章的形式对这些影响因素逐个分析,本文将重点分享软件绘制存在的问题及优化方案。
Android绘制View有三个主要的步骤,分别是measure、layout和draw。通过Measure和Layout来确定当前需要绘制的View所在的大小和位置,通过Draw绘制到surface。绘制过程主要是由CPU 来进行Measure、Layout、Record、Execute的数据计算,GPU进行Rasterization(栅格化)、渲染操作。
如果渲染过程中,不使用硬件加速,我们称之为软件绘制,如果使用硬件加速,则称为硬件绘制。简单来说,区分软件绘制还是硬件绘制,主要看systrace日志中draw方法实际是由CPU还是GPU完成的(有没有RenderThread线程参与)。
由于draw方法会涉及非常多的屏幕像素点对应的单元计算,而且重复工作较多,因此,软件绘制会比硬件绘制效率低很多,有时候很多draw对应的计算无法在一帧(60hz屏幕刷新频率对应16.7ms,90hz屏幕刷新频率对应11.1ms)内完成,就会引起丢帧从而带来界面滑动不流畅的使用体验。针对软件绘制问题进行优化,可以有效提升应用性能表现和用户体验。
2.1 测试环境
手机型号:mate30 8+128g
系统版本:Android 10.0
屏幕刷新率:60hz
测试范围:
2.2 测试步骤
1)应用安装后启动,完成授权;
2)分别在各应用多个页面滑动,基于人眼主观流畅性体验,针对抓取不流畅页面对应的systrace、applog日志;
3)根据systrace日志,分析不流畅界面丢帧情况;
4)判断出现软件绘制问题的方法:
参考上述表格,有3种方法可以同时用来确认:
在log中搜索“enableHardwareAcceleration”关键字即可,如果值为false,就是软件绘制:
01-2316:16:38.085 22775 22775 D ViewRootImpl[ZongHeFenLeiListActivity]: enableHardwareAcceleration false
2.3 测试结果
我们发现,上述8款应用的不流畅场景下,图像绘制均采用软件绘制的方式,测试滑动帧率都低于60帧,部分应用甚至低于30帧,卡顿感明显。经华为终端开放实验测试发现,上述应用已在新版本优化该问题,用户可及时更新版本获取更好的使用体验。
3. 软件绘制问题分析
软件绘制在新处理器平台手机上导致应用卡顿问题较多,很多应用甚至主界面都会出现卡顿。这是由于应用在早期设计时,为了兼容低端手机硬件平台性能,默认采用软件绘制方式进行图像绘制。而随着芯片平台的不断发展,大多数应用场景不会再受到手机的性能限制。
而导致软件绘制效率差的原因,主要有有3点,我们可以针对性的进行改进:
4. 软件绘制问题优化建议
最理想的情况是全程使用硬件绘制,但还需要避免可能会存在的一些兼容性问题。如何既保证硬件绘制减轻UI线程的负载,又能让getDrawingCache得到需要的图片缓存,是解决这个问题的关键。
当前流畅性体验问题已经远比兼容性问题更加严峻,而软件绘制和硬件绘制的绘制效率差距将近4-5倍,我们建议应用开发者后续默认使用硬件绘制(开启硬件加速),尤其是主界面、列表显示图片较多、图片尺寸较大的场景,优先硬件绘制;对于一些图片尺寸较小、界面滑动不是关键操作路径时,可以考虑软件绘制。
· END ·