最近项目上发现在canvas 2D 渲染上不断画随机渐变直线时,在一些android手机上会出现帧卡顿,而画普通直线则没有卡顿问题。
代码片段的功能:每个渲染帧,绘制 40根 长度为10 的 渐变线线,从上往下绘制。在oppo r9s plus手机上,每隔3~10秒,就概率性出现一次0.5~1秒的"长时间"卡顿,对动画效果影响很大。
代码片段在一些手机上的测试结果:
在oppo r9s plus(Android 6.0.1 微信8.0.28、8.0.32) 上有这种卡顿问题,
在vivo Y79A (Android 7.1.2 微信8.0.28)上有这种卡顿问题
在 iphone 7 plus 、iphone 14 pro Max 上没有这种卡顿问题
个人觉得每帧画线数量少、长度小,不至于出现因资源不足而长时间卡顿,查看手机cpu占用率也未超60%,应该是代码或调度上的问题。
也怀疑过是createLinearGradient分配内存过频繁,导致触发内存回收而卡顿,不过这貌似解析不了为什么在iphone上没出现。
createLinearGradient因参数无法固定,只能动态创建。请问是否有办法优化、解决?或者有什么别的渐变线方案替代?谢谢~~