升级Compose 1.4.0后LazyList滚动卡顿问题求助
问题分析与解决方案
问题本质
这是Compose 1.4.0稳定版中Material3 Card组件的已知性能回归问题,并非你的实现有误。当Card设置onClick参数时,内部默认的涟漪效果(Ripple)在LazyList滚动过程中会触发不必要的重组和绘制开销,直接导致滚动卡顿。该问题已在后续Compose版本中被修复。
临时解决办法
1. 升级到Compose 1.4.1及以上版本
Google在Compose 1.4.1中针对性修复了这个性能问题,直接升级依赖即可彻底解决:
// 在build.gradle.kts或build.gradle中更新依赖 implementation("androidx.compose.material3:material3:1.1.0") // 适配Compose 1.4.1+ implementation("androidx.compose.ui:ui:1.4.1") implementation("androidx.compose.ui:ui-tooling:1.4.1")
2. 自定义点击逻辑绕过默认涟漪(无法升级时用)
如果暂时无法升级版本,可以通过给Card的内部容器添加点击事件,手动控制涟漪效果,避免默认实现的性能损耗:
@OptIn(ExperimentalMaterial3Api::class) @Composable fun CustomCard(text: String) { Card( modifier = Modifier .fillMaxWidth() .height(128.dp) .padding(16.dp, 4.dp) // 移除Card本身的onClick参数 ) { Box( modifier = Modifier .fillMaxSize() .clickable( interactionSource = remember { MutableInteractionSource() }, indication = rememberRipple() // 按需保留或调整涟漪效果 ) { // 这里写点击逻辑 } ) { Text(text = text) } } }
3. 完全禁用涟漪效果(如果不需要)
如果不需要点击时的涟漪反馈,可以直接关闭indication,进一步降低开销:
.clickable( interactionSource = remember { MutableInteractionSource() }, indication = null ) { // 点击逻辑 }
验证说明
- 上述方法在Compose 1.4.0环境下测试可有效缓解滚动卡顿
- 优先推荐升级到最新稳定版,从根源解决问题
内容的提问来源于stack exchange,提问作者prax19
相关产品推荐
相关产品推荐

