Skip to content

fix(chat): prevent new chat intro crash when its request is cleared - #214

Open
3316891527 wants to merge 1 commit into
devfrom
fix/new-chat-intro-lifecycle
Open

3316891527 wants to merge 1 commit into
devfrom
fix/new-chat-intro-lifecycle

Conversation

@3316891527

Copy link
Copy Markdown
Owner

变更说明 / Description

新建对话入场动画播放期间,请求被消费、切换或移除时,绘制子组合可能继续使用已经变成 null 的请求 ID,并在 NewChatIntro.kt 中触发 IllegalArgumentException: Required value was null。本次将每轮动画的状态和绘制绑定到固定的非空请求 ID,请求失效时移除对应组件。

背景与动机 / Context and motivation

用户报告在新建对话、删除新建对话并退到后台后连续出现崩溃,截图明确指向生成粒子轨迹时的 requireNotNull(requestId)。设备退出历史记录了三次 EXIT_SELF / status=1,与全局异常处理器的退出方式一致;当时的 logcat 已被循环缓冲区覆盖,退出历史不包含堆栈,不能据此认定三次都是同一异常。

改动范围 / Changes

  • 在可空请求入口确定非空 ID,使用 key(id) 隔离每轮动画的进度、播放标记和绘制子组合。
  • 绘制实现接收非空请求 ID,移除生成随机轨迹时的强制非空检查。
  • 离页和取消回调消费本轮固定 ID,避免旧动画收尾消费替换后的请求。
  • 增加四项 Compose 设备回归源码:播放中清空请求、切换对话、替换请求、移除组件。用例在改变状态前先确认动画实际进入布局。
  • 记录问题证据、实现范围和验证边界,复用项目现有 Compose 测试宿主依赖。

兼容性与风险 / Compatibility and risks

保持现有的播放条件、1.8 秒动画、5 秒请求过期和系统关闭动画时的行为。会话存储、删除规则、配置和公开参数保持兼容。主要待验证范围是 Compose 在动画播放和取消交错时的设备行为。

关联 Issue / Related issue

N/A:来自用户提供的崩溃截图和操作步骤,尚无对应 GitHub Issue。

验证方式 / Verification

  • git diff --check 和暂存差异空白检查通过。
  • 仓库卫生检查覆盖 4 个新增或修改文件,errors=0 warnings=0。
  • 复用仓库 Markdown 链接检查器核对两份变更文档,断链 0。
  • 本地未执行编译、构建或测试;远程验证使用本 PR 的 CI,并派发 Debug Build 与 Android Tests 工作流。
  • 新增的四项 Compose 设备回归尚未执行,要求设备开启系统动画。现有远程 JVM 测试和 Debug Build 不执行这些设备用例;新增测试源码不代表设备验收已通过。

证据 / Evidence

崩溃截图中的异常和行号与原 NewChatIntro.kt:77 的 requireNotNull(requestId) 对应。实现及设备验收范围见 docs/TODO/fix/new-chat-intro-lifecycle/index.md。原始设备日志与截图不提交到仓库。

检查清单 / Checklist

  • 我已记录可复现验证和未运行项原因 / Reproducible verification and reasons for unrun checks are recorded
  • 日常开发 PR 的目标分支为 dev / The target branch is dev for regular work
  • 我已确认 Candidate checks 覆盖改动范围,并会处理技术失败项 / Candidate checks covers the change scope and technical failures will be addressed
  • 最终 diff 无无关、临时、生成、二进制或敏感内容 / Final diff has no unrelated, temporary, generated, binary, or secret content
  • 已提供对应的回归源码和文档,并明确设备用例尚未执行 / Regression sources and docs are included; device tests remain unrun

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant