v3.2.0
ColorOS Live Lyrics Bridge v3.2.0
v3.2.0 在 v3.1.0 自定义能力的基础上完成设置链路、解析稳定性与渲染性能收束。本版本修复设置链路可能覆盖外观配置、极近时间戳的歌词开头信息可能干扰逐字行匹配,以及自绘歌词每帧触发 SystemUI 全量测量与布局的问题;不改变既有 RecyclerView prime、滚动、槽位动画或 AOD 低刷新时序。
设置链路热修
- 播放器翻译设置只更新全局翻译默认值、播放器默认值和清除记忆请求,不再携带并回写可能过期的完整外观快照,避免居中、字号、行距、透明度和光晕等设置被意外恢复。
- 修复设置页 Spinner 初始化回调可能被误判为用户操作的问题,避免进入页面或重新绑定预设时意外应用“默认”预设。
- 修复设置页首次绑定发生在滑块监听器安装之前时,数值文字仍停留在控件下限的问题;保存后重新进入页面,透明度、模糊、缩放、光晕、字号、翻译比例和行距的文字会与滑块及实际配置一致。
- 页面因系统重建时会保存并恢复尚未提交的配置草稿,减少旋转、窗口重建等场景下的编辑内容丢失。
- 设置广播增加单调递增 revision、来源标识和受保护的
ResultReceiver回执;设置页会区分“已保存”“SystemUI 已应用”“SystemUI 拒绝”和“未收到确认”。 - Logcat 增加
settings-send、settings-receive、settings-applied、settings-ack和settings-rejected事件,并记录 revision、来源和最终对齐值,便于诊断偶发的设置未生效或对齐回退。 - 修正悬浮预览相对标题栏边界的坐标换算,优先使用实际 ActionBar 容器底边,避免预览框贴到屏幕顶端或遮挡标题栏。
- 设置页滑块改用不注册系统手势排除区的轻量控件,避免长页面滚动时每帧为多个原生滑块反复计算手势排除区与避让区。
- 设置页窗口稳定请求最高 120 Hz,并关闭独立的触摸升频投票;Android 15 及以上启用帧率省电平衡提示,使 LTPO 面板仍可在内容静止时向下自适应,避免滚动期间在 60/120 Hz 间反复切换造成 Buffer Stuffing。
- 合并悬浮预览的位置更新到下一帧执行,复用坐标缓存,并跳过没有变化的位移和阴影高度写入;滚动期间将整块预览临时缓存为硬件层,停止 160ms 后释放,降低主线程与 RenderThread 的重复绘制,同时不长期占用额外显存。
歌词解析与显示修复
- 修复极近时间戳的开头信息被 Accompanist 误合并为双语歌词的问题。例如相邻的“作词”“作曲”和第一句双语歌词会重新保持各自时间轴行,避免后续 RecyclerView 索引整体错位。
- 解决关闭所有可选歌词开头清理规则后,部分歌词可能出现逐字进度中途消失、相邻同文歌词同时高亮,以及制作信息异常放大的问题。
- 修复仅拆分能够确认吸收了非歌词信息的解析行;其余歌词继续保留上游逐字区间和翻译匹配结果,避免对正常的轻微错位双语歌词造成影响。
- 增加受频率限制的官方绘制回退诊断,记录模型缺失、行匹配失败和绘制异常,同时继续将 Hook 范围限制在
LyricsRecyclerView内。
SystemUI 渲染性能热修
- 将官方歌词
TextView的字体内边距和最小高度准备改为幂等操作:属性已经满足要求时不再重复调用 setter。 - 修复自绘路径每帧调用
TextView.setMinHeight(0)并触发requestLayout(),导致整个锁屏通知面板几乎每帧重新measure/layout的问题。 - 保留逐字进度、光晕、模糊和滚动的原有刷新节奏;不通过降帧隐藏 CPU 开销,也不修改翻译展开/收起的真实槽位动画。
- 不移动或延迟
LyricsRecyclerView首次 attach、prime、setCurrentLyric、可见行高度同步及 AOD 低刷新路径。
刷新率与媒体封面
- 将“最大动态刷新率”更名为“歌词刷新上限”,并明确该设置只限制歌词内容重绘,不会强制 ColorOS 将锁屏物理刷新率升至 90/120 Hz;系统降至 60 Hz 时歌词也会随之降至 60 帧。
- 固定 60/90/120 Hz 改为按显示帧时间做截止时间节拍。修复 90 Hz 在 120 Hz 屏幕上因毫秒取整而实际退化为逐 VSync 刷新的问题,同时不会在物理屏幕已经降频时虚构额外帧。
- 修复 Salt Player 冷启动首曲歌词结果回写与异步封面加载竞争的问题:歌词元数据只进行一次延迟发布,并在发布前重新读取当前 MediaSession 元数据和核对曲目身份,不再用较早保存的元数据快照覆盖刚更新的封面。
- 歌词元数据发布日志增加位图尺寸、generation、对象标识和 URI 摘要,后续若仍出现播放器自身上报旧封面的情况,可以区分播放器源数据与 SystemUI 缓存问题;不会复制、清空或修改封面像素。
修复测试结果
同一设备、模块开启并使用 Salt Player 锁屏歌词的 60 秒 Perfetto 前后对比结果如下:
| 指标 | v3.1.0 | v3.2.0 构建 | 变化 |
|---|---|---|---|
| SystemUI 总 CPU | 57.63% | 45.33% | 下降约 21% |
| SystemUI 主线程 CPU | 26.48% | 14.83% | 下降约 44% |
| RenderThread CPU | 24.89% | 24.12% | 基本不变 |
measure |
3616 次/分钟 | 36 次/分钟 | 减少约 99% |
layout |
3616 次/分钟 | 36 次/分钟 | 减少约 99% |
- 官方锁屏歌词参考样本的 SystemUI 主线程为 14.56%、RenderThread 为 24.45%、
measure/layout各 99 次/分钟;优化后主线程开销已接近官方参考路径。官方样本为维持亮屏包含周期唤醒命令,因此只作为参考,不作为严格的整机耗电等价对照。 - 修复前后均保持约 60 帧/秒的歌词绘制采样,性能下降并非通过关闭逐字刷新或降低亮屏歌词帧率取得。
- 修复后 Perfetto 有效时长为 59.991 秒,未发现跟踪数据丢失或非信息级 trace stats 错误。
testDebugUnitTest、assembleDebug、lintDebug和git diff --check均通过;Lint 无错误,仅保留既有的兼容性、依赖版本、资源反射和一次性 DexKitBridge 解析提示。- 新增配置 round-trip、播放器翻译不得覆盖外观、设置 revision 单调性、悬浮预览坐标和极近时间戳开头信息解析回归测试。
- 新增 60/90/120 Hz 截止时间节拍单测;设置页 120 Hz 连续滚动 CPU 通常约 30%、峰值约 40%,与系统设置页同类滚动负载接近,停止滚动后正确回落到接近 0%,未发现持续后台占用。
- 冷启动首曲封面发布增加当前曲目身份复核与诊断信息;播放器强制停止后的首曲概率场景仍建议后续持续观察。
LyricProvider
- LyricProvider 协议和代码保持不变,已安装 v3.1.0 Provider 的用户无需更新;本次问题均在 Bridge 设置、解析和 SystemUI 绘制侧修复。
Release 资产
ColorOS-Live-Lyrics-Bridge-v3.2.0.apkLyricProvider-QQMusic-v3.2.0.apkLyricProvider-163Music-v3.2.0.apkLyricProvider-AppleMusic-v3.2.0.apkLyricProvider-Poweramp-v3.2.0.apkLyricProvider-Spotify-v3.2.0.apkLyricProvider-QiShui-v3.2.0.apkLyricProvider-KuGou-v3.2.0.apkLyricProvider-v3.2.0.zip
