为何Android Studio Arctic Fox标记rememberSaveable变量为未使用?
问题原因
这个警告属于Android Studio的静态代码分析误报。当前Android Studio对Jetpack Compose的状态读写场景的分析能力还存在局限性,它按照普通Kotlin函数的执行逻辑判断:认为你给isVisited赋值为true之后,当前函数执行流程里没有立即读取这个新值的代码,所以判定该赋值未被使用。但实际上这个值会在你从NextView返回触发MainView重组时被读取,用来阻止重复跳转,原有逻辑完全正确,不影响运行。
符合Compose规范的实现方案
Jetpack Compose官方推荐使用副作用API来处理这种需要在重组时执行一次的逻辑,针对你的场景,用LaunchedEffect就可以完美实现需求,无需手动维护访问标记变量,也不会产生警告:
@Composable fun MainView(navController: NavController) { // 传入固定key Unit,该代码块仅会在MainView首次进入组合时执行一次 LaunchedEffect(Unit) { navController.navigate("NextView") } Button(onClick = { navController.navigate("NextView") }) { Text(text = "MainView") } }
该实现和你原有逻辑完全等价:LaunchedEffect的生命周期和MainView的组合生命周期绑定,跳转到NextView时MainView不会退出组合,从NextView返回后也不会重新触发LaunchedEffect的执行,自然不会重复跳转,同时天然支持配置变更(横竖屏切换、系统语言修改等)后不重复触发导航。
原有逻辑兼容方案
如果你希望保留现有的实现写法,只需要给赋值行添加注解忽略警告即可:
if (!isVisited) { @Suppress("UNUSED_VALUE") isVisited = true navController.navigate("NextView") }
内容的提问来源于stack exchange,提问作者Andy Hill
相关产品推荐
相关产品推荐

