用途:帮助开发者在 Compose HotSwan 热重载循环中保留 Jetpack Compose 状态,让每次重载尽量停留在第 1 级,减少滚动位置、对话框状态、懒加载列表、标签选中项等丢失。
主要能力:说明 HotSwan 的三级机制。第 1 级定向重组只重组合受影响作用域,保留导航返回栈、滚动位置、remember/rememberSaveable、ViewModel、懒布局项、对话框与底部弹窗状态;第 2 级组合重置会销毁并重建所有组合,丢失未被 Saveable 保留的 per-composable remember 及未被保存状态持有者持有的滚动位置,触发条件为第 1 级不可用(主题变更、根作用域结构性变更);第 3 级 Activity.recreate() 重启 Activity,只有 ViewModel 与 SavedInstanceState 存活,触发条件为组合失败或检测到 schema 不匹配。
使用方式:每次重载后先读 HotSwan 工具窗口状态中报告的重载级别;若第 2 级丢失状态,把该组合内的局部 remember 改为 rememberSaveable;长时间迭代时把选中标签、展开项、对话框开关、滚动位置等瞬时 UI 状态提升到 ViewModel(可跨全部三级存活);快速循环期间避免修改 MaterialTheme 或根 CompositionLocal 使用的值;对被编辑的值避免使用 staticCompositionLocalOf,改用 compositionLocalOf。
适用场景:开发者报告热重载后滚动跳回顶部、丢失对话框状态、懒加载列重新请求、标签选中重置;即将重构组合并想知道改动触及哪个重组作用域;工具窗口显示第 2 或第 3 级重载需要排查升级原因;想了解各状态持有者在 Activity.recreate() 与组合重置下的存活情况。
限制:不适用于改动被判定为 schema 违规(新增参数、修改构造函数、新增资源 ID)而回退到完整增量构建的情况;不适用于未安装 HotSwan 或监视器未运行的情况;不适用于想由 AI 代理自主驱动循环的情况;也不适用于与热重载无关的重组合范围过宽问题。前置条件为已安装并运行 Compose HotSwan 的 WATCHING、熟悉 Compose 重组作用域与 rememberSaveable。验证要点包括:编辑组合正文保持滚动与对话框状态且工具窗口报告第 1 级,编辑 MaterialTheme 颜色会升级到第 2 级,rememberSaveable 状态可跨第 2 级组合重置,ViewModel 状态可跨第 3 级,rememberLazyListState 在第 2 级重载后保留滚动位置。具体用法细节与完整示例以官方文档为准。