目录

应用在页面跳转时发生卡顿的现象

问题现象

当用户点击应用页面上的内容(比如按钮),从一个页面进入到另一页面过程,出现卡顿的情况。

背景知识

问题定位

以某应用页面切换卡顿为例,相关定位过程如下:

  1. 使用DevEco Profiler Frame模板抓取应用页面切换的Trace信息,根据Trace关键字H:ABILITY_OR_PAGE_SWITCH确定页面切换的过程,查看该过程应用主线程Trace信息,发现主线程在该过程并没有多次触发绘制送显,因此推测不是应用主线程卡顿导致的页面切换卡顿,而是Render Service卡顿。

  2. 查看render_service线程,发现渲染服务线程在接收Vsync信号处理时,长时间处于PostAndWait阶段(175ms左右),在等待RsUniRenderThread子线程唤醒。

    而RsUniRenderThread子线程在执行绘制时,应用窗口的绘制时长时间处于Running状态,时长达到了179ms,同时有创建8191x7176大小的纹理,推测是页面负载过高,并且与图片有关。

  3. 使用ArkUI Inspector抓取页面的布局,发现页面层级不深、布局不复杂,Image组件的图片为http图片资源。

    将图片下载后查看得知该图片的分辨率达到了10800*7176,图片分辨率较大,超出了Image组件DMA策略生效的图片大小范围,在绘制时会出现纹理上传,导致渲染服务绘制耗时,出现卡顿。

分析结论

应用页面的资源图分辨率过大,在绘制时会进行纹理上传,绘制耗时多,导致页面切换卡顿。

修改建议