KMP Decompose多保留组件重复注册Key致Android应用崩溃求助
Decompose库Android端retainedComponent重复注册崩溃问题解决
需设置唯一Key的位置
- 所有通过
retainedComponent创建的组件实例,必须传入全局或所在作用域内唯一的key参数 - 具体涉及两个核心位置:
- Android入口创建
RootComponent的retainedComponent调用处 - Android入口创建
DashBoardRootComponent的retainedComponent调用处
- Android入口创建
代码错误分析
- 你在Android端创建这两个根组件时,没有为
retainedComponent指定自定义的唯一key,大概率使用了默认值(比如空字符串)或者重复的key - Decompose在Android端依赖系统的
SavedStateRegistry管理组件状态,相同key会导致重复注册同一个SavedStateProvider,直接触发崩溃 - 桌面端没有Android的SavedState机制,所以不会检测到这个冲突,因此运行正常
修正示例
创建RootComponent时指定唯一key:
val rootComponent = retainedComponent(key = "root_component") { RootComponent(/* 你的参数 */) }
创建DashBoardRootComponent时指定另一个唯一key:
val dashboardRootComponent = retainedComponent(key = "dashboard_root_component") { DashBoardRootComponent(/* 你的参数 */) }
额外注意
如果后续在组件内部嵌套使用retainedComponent创建子组件,也要确保key在父组件的SavedState作用域内唯一,避免同类冲突
内容的提问来源于stack exchange,提问作者Vishal Bhimporwala
相关产品推荐
相关产品推荐

