Jetpack Compose NavHost 导航时 composable 页面多次重组问题咨询
这是框架的预期设计行为,不属于Bug。
原因如下:
- Compose的重组机制本身就支持多次执行,框架会根据状态变化自动调度重组,只要Composable的输入参数没有变更,重组会自动跳过对应节点,不会带来性能损耗。
- 你使用的Navigation 2.4.0-alpha08版本已经默认支持导航过渡动画,导航切换时的动画帧变化会持续触发退场页面(Splash)和入场页面(Login)的重组,你打印的多条日志就是动画执行过程中产生的,等动画完全结束后,页面就不会再无理由重复重组。
- 你直接在composable路由的根节点打印日志的方式,自然会捕获到所有重组事件,这种情况不需要额外处理,只要保证你的Composable函数是幂等的,不要依赖函数执行次数处理业务逻辑即可。
额外建议:
- 所有需要和生命周期绑定的逻辑,都要用
LaunchedEffect、DisposableEffect等效应API包裹,指定明确的依赖key,不要直接写在Composable的根作用域里。 - Debug模式下Compose本身会产生更多的重组行为,不要用Debug下的重组次数作为性能判定标准,需要判断性能问题时请测试开启了R8混淆的Release包。
内容的提问来源于stack exchange,提问作者tamtom
相关产品推荐
相关产品推荐

