Files
lumaplayer/memory/lessons.md
T

23 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 教训
- 中:本地目录原先没有 `.git`,不能直接 `pull`;应先获取远端历史,以共同基线做三方合并。
- 中:合并后需编译检查跨文件 API;本次发现并修复资源别名、Backdrop 导入及底部导航 `mainTabs` 缺失问题。
- 低:远端 URL 不保留账号密码,认证信息只用于本次读取。
- 高:Kyant0 Backdrop 的 `layerBackdrop` 捕获范围内不能再直接绘制使用同一 backdrop 的玻璃控件,否则可能形成循环渲染并在 RenderThread 触发 SIGSEGV;页面源层与玻璃控件必须分离,视频源层只包 AndroidView。
- 中:远端提交与本地大范围未提交 UI 改动并行时,先暂存本地改动、合并远端非冲突文件,再恢复本地改动并手动吸收远端业务行为,避免整文件覆盖。
- 高:Backdrop 的来源层与消费玻璃必须是同级兄弟层;菜单外部手势层也必须位于菜单内容下方,否则打开手势会误触发关闭。
- 中:Backdrop 的玻璃效果是否明显取决于来源内容;纯白卡片上无法显示明显折射,需依靠仓库的高光、阴影和 lens 边缘表现,不能用普通白色背景冒充。
- 高:Root Overlay 若直接消费外层页面 `layerBackdrop`,外层 source 会把 Overlay 再捕获形成 RenderNode 循环;必须为局部页面建立只包裹底层内容的 source,并让 Overlay 作为兄弟 consumer。
- 高:Room 实体由 Java 可空字段映射时,迁移列定义必须与 Room 的 `notNull` 预期一致;新增 `protocol` 使用可空列并在模型读取时回退 HTTPS,否则旧数据库启动会因迁移校验失败崩溃。
- 低:Compose 非 Composable 回调中不能直接调用 `stringResource`;需在 Composable 作用域先缓存文案,再传入回调。
- 低:全量 `lintDebug` 在当前环境分析阶段长时间无输出且无报告;最终以 `assembleDebug`、`git diff --check`、资源键和关键残留静态检查收尾。
- 高:本地 AndroidLiquidGlass-kmp 的 `lens` 和高光默认样式会创建 Android 13 AGSL RuntimeShader;出现 RenderThread SIGSEGV 时不能只改 Kotlin 异常处理,应移除 RuntimeShader/折射链并以 Backdrop blur、vibrancy、Plain highlight 和 Compose 渐变降级。
- 高:根 `layerBackdrop` 不应包住播放器等原生 View;子页面应避免把同一个 source 同时作为父捕获层和子消费层,否则即使没有 AGSL 也可能形成 RenderNode 循环。
- 高:Android Emulator 的 Kyant RenderEffect/GraphicsLayer 采样可能直接在 RenderThread 触发 SIGSEGV,Kotlin 异常无法兜底;应按运行环境在进入 `drawBackdrop`/`layerBackdrop` 前降级,且播放器永不捕获 AndroidView。
- 高:仅跳过 `drawBackdrop` 仍可能提前创建 `rememberGraphicsLayer`;Backdrop 来源应在不安全设备上直接返回 `null`,源层和消费层都不能挂载。
- 高:模拟器不一定使用标准 `sdk_gphone` 指纹,RenderThread 防护还应检查 x86 ABI、board 和 `emu` 设备名;详情页绘制回调中的 Compose 状态也必须提前快照。
- 中:Emby 播放回报必须沿用 PlaybackInfo 返回的 `PlaySessionId`/`MediaSourceId`,并将开始、进度、停止事件串行化;把回报协程绑定到播放器 Composable 生命周期会在返回页面时丢失停止事件。
- 高:液态玻璃不能以“API 版本高”作为唯一启用条件;Kyant Backdrop 还需通过设备安全门和运行帧率门控,低帧率/不安全 GPU 必须在创建 LayerBackdrop 前降级,避免 RenderThread 崩溃。
- 高:玻璃模式已改为用户手动选择,不能再用 Choreographer 帧率变化自动切换;但模拟器/低版本仍必须在创建 Kyant LayerBackdrop 前保留硬件安全门,避免 RenderThread SIGSEGV。
- 中:降级玻璃的边缘高光应在 `drawContent()` 之前绘制;否则公共玻璃容器中的文字和图标会被高光层洗白。