目录

应用上架检测反馈存在RS前台空跑现象

问题现象

应用上架检测驳回,反馈问题:应用在前台存在不合理使用不可见动画的问题,应用在前台不允许有RS绘制空跑。

背景知识

上架检测RS空跑拦截标准:skip/(duration/1000) > 10,每秒10次(帧)以上不可见刷新,认为是存在不可见动效。

问题定位

一、环境准备:
  1. 打开手机相关日志和Trace开关。
    • 打开USB调试开关:设置-系统-开发者选项-USB调试。
    • 打开图形debug日志:
      hdc shell hilog -b D -D 0xD001400
      hdc shell hilog -b D -D 0xD001406
    • 设置屏幕休眠时长10分钟,防止测试过程中快速休眠:设置-显示和亮度-休眠。
  2. 升级最新的ROM版本。
    • 使用DevEco Studio 6.0.0.274及以后的版本,插入设备。
    • 下滑entry入口,打开Enable DebugLine开关。
    • 编译debug版本应用安装到设备。
分析流程:
  1. 复现空跑异常操作路径:打开DevEco->Log,过滤DisplayNode skip关键字;按照上架检测测试步骤操作,发现有频繁打印(每秒5次以上)则判断当前界面有空跑异常。
  2. 按照复现路径抓取详细信息:
    • 抓取Trace信息:点击Profiler工具,选择要分析的应用进程,创建一个Energy Session,按照复现路径操作应用,抓取15s左右信息。观察Energy Anomaly泳道,标注红色异常则为识别到了空跑异常。
    • 分析Trace信息:
      • 点击Energy Anomaly泳道红色区域会展示Details信息。
      • 点击Details的Anomaly Count会展示More信息,More信息展示的是每一帧空跑VSyncId和持续时间。
      • 右边有个跳转箭头,点击会跳转到当前空跑帧的详细信息。
      • 在空跑帧界面,点击Details模块下的Open Layout打开布局展示。
      • 在Component Tree展开布局组件,左边有感叹号图标的则为当前空跑帧的组件。

分析结论

前台RS空跑可能是应用侧使用的动画效果在离开页面后没有及时停止,可能是系统动画、lottie动画等,具体原因需要应用侧进行排查。

修改建议

当前系统为了便利开发者,对一些常用的动图内置了可见性接口,防止其空跑。例如,lottie库版本在2.0.14及以上、apng库版本在1.1.2及以上。如果开发者未对此类三方动画库的播放控制进行封装或修改,可直接通过更新库来避免不可见时的空跑问题。如果已进行封装或修改,则建议按照以下两种方法进行修改。

方法1-监听法:通过监听组件是否可见,管理刷新动画的不可见现象。

方法2-可见法:通过监听组件移出屏幕的事件,修改动画播放状态,从而控制空跑。

总结

RS空跑常见于加载动画、刷新动画未及时停止等场景,建议引导开发者对应用中的动画进行排查。