SuperAPI AI 工具集

state-and-background-footguns

编程与开发

查看项目

更新于 10-17 16:17

技能介绍

用途

该技能是一个面向 Kotlin 与 Compose Multiplatform 开发的陷阱参考索引,聚焦“响应式状态”与“后台工作及平台运行时”两个领域。它从一款生产级 Kotlin 与 Compose Multiplatform 应用中挖掘出 23 个陷阱,原样收录于 references/ 目录,每个陷阱一个短文件。

主要能力

每个参考文件提供三部分内容:可用的实现模式;该模式在实践中具体如何失败及其原因;以及一个“Verifying it”章节,给出可对用户自己的代码树运行的验证命令。文件长度均在 150 行以内。

索引按主题组织,并标注了应当查阅该条目的症状,便于按“即将编写的代码”或“正在追查的症状”进行匹配。

响应式状态:Flow、StateFlow 与 ViewModel

涵盖的陷阱包括:StateFlow 合并导致状态倒序(写入顺序成为正确性问题,收集者只看到最后一次写入);命名 Job 生命周期纪律(每个关注点一个 Job 字段,重启前先取消);只读 StateFlow 与冷转热(用 asStateFlow 暴露状态,用 stateIn 配合 WhileSubscribed 转为热流);flatMapLatest 重新订阅与复合键;按 key 去重、逐项重置与取消;用 combine 将多个条件流合并为一个门控;Compose Multiplatform 的共享 ViewModel 基类及其阻塞式资源查找隐患;双模持久化(关停路径阻塞写、周期任务即发即忘);将“已请求未应答”建模为独立字段;通过比对值而非存储标签来推导预设身份;以单个不可变快照返回整段时间的数据而非十余条独立流;以及不应存储而应派生布尔标志的问题。

后台工作、服务与平台运行时

涵盖:将应用备份为 zip 并通过系统 MediaStore 写入用户下载目录(仅 Android);由 DataStore 设置直接驱动 WorkManager 周期任务(仅 Android);周期 worker 去重,避免设备重启后重复通知(仅 Android);桌面应用单实例保护须在依赖容器之前运行;Compose 桌面入口在首个窗口出现前需执行的探测、系统属性与平台门控清单;通过替换模块实现可开关的崩溃上报,以及基于较旧控件工具包的桌面崩溃对话框;KMP 日志门面(在调用点与日志库之间放置统一对象);基于既有状态构建 Glance 主屏小部件(仅 Android);RemoteViews 位图预算(按绘制尺寸解码图片,否则更新会被平台拒绝,仅 Android);Glance 布局词汇(无宽高比、weight 恒为 1、圆角仅 API 31 起生效等,仅 Android);以及按需下载的字典资源(仅在用户选择启用时下载,消费者通过文件系统判断是否就绪)。

使用方式

将即将编写的代码或正在追查的症状与索引条目匹配,用 Read 工具阅读所有可能适用的文件后再提出代码或修复方案。若验证命令中出现源项目路径,应替换为用户代码树中的对应路径。文件中出现的反引号陷阱名若未在本索引列出,则位于同类区域的技能中,可通过 glob ../*/references/<name>.md 打开。

适用场景

适合在 Kotlin 与 Compose Multiplatform 项目中编写响应式状态、后台任务、Android 小部件、桌面应用入口或日志与崩溃上报相关代码时,作为排查与设计参考;也适合针对诸如“加载指示器盖住已加载内容”“详情页闪现上一项内容”“重启后出现重复通知”“小部件显示错误占位符”等具体症状定位原因。

限制

该技能为参考文档集合,不提供自动化修复或代码生成流程;部分条目明确限定为 Android 平台或仅涉及桌面端。具体实现细节、依赖版本与验证命令需以各参考文件内容为准。