LazyVerticalGrid开启isMinifyEnabled的Release版本仍存严重性能问题
核心问题
用仅包含Text组件的极简LazyVerticalGrid实现,在Release版本下仍出现快速滚动卡顿,且已尝试常规优化(Release包、添加item key)无效,以下是具体原因分析和解决办法:
可能原因
Compose版本性能缺陷
当前使用的kotlinCompilerExtensionVersion = "1.5.8"对应Compose 1.5.x版本,该版本的LazyVerticalGrid在GridCells.Fixed布局下存在已知的滚动性能问题,尤其是快速滚动时的布局测量和渲染调度效率不足,后续1.6+版本针对性修复了这类底层bug。设备/ROM适配问题
- Android 14模拟器的GPU模拟性能有限,即使是Release包,虚拟机的渲染管线也无法完全还原真机的硬件加速效果,容易出现卡顿。
- Poco X3 Pro搭载的CRDroid自定义ROM,可能对Compose依赖的系统级硬件加速特性做了裁剪或修改,导致软件渲染占比过高,引发卡顿。
Compose编译优化未拉满
即使开启了混淆,若未配置Compose专属的编译优化选项,编译器无法最大化跳过不必要的重组,会额外消耗性能。
解决方案
1. 升级Compose版本
将kotlinCompilerExtensionVersion升级到1.6.0及以上(Kotlin 1.9.22可匹配Compose 1.6.1),同时同步升级所有Compose依赖(如material3、foundation)到对应版本:
// app/build.gradle.kts kotlinCompilerExtensionVersion = "1.6.1"
新版本修复了LazyGrid的滚动调度逻辑,能显著降低快速滚动时的CPU/GPU占用。
2. 优化Grid布局策略
替换GridCells.Fixed(5)为GridCells.Adaptive(minSize = 64.dp),Adaptive模式会根据屏幕宽度自动计算列数,内部测量逻辑更高效,避免固定列数在不同屏幕下的布局冲突:
LazyVerticalGrid(GridCells.Adaptive(minSize = 64.dp)) { items(1000, key = { it }) { i -> Text("$i") } }
3. 开启Compose编译强跳过模式
在Release构建中添加Compose编译优化配置,让编译器主动跳过无状态组件的重复重组:
// app/build.gradle.kts buildTypes { release { isMinifyEnabled = true isShrinkResources = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") composeCompiler { enableStrongSkippingMode = true // 启用强跳过模式,减少不必要重组 disableDebugAssertions = true // 关闭调试断言,提升运行效率 } } }
4. 排查ROM硬件加速设置
在CRDroid的开发者选项中,确认以下选项已开启:
- 强制GPU渲染
- 启用HW叠加层
部分自定义ROM默认关闭这些特性,导致Compose无法利用硬件加速渲染。
验证步骤
- 优先升级Compose版本,编译Release包在原生Android真机(如Pixel)测试,确认是否解决卡顿。
- 若仍有问题,用Android Studio的Compose Profiler查看滚动时的重组次数和渲染耗时,定位具体瓶颈。
- 对比自定义ROM和原生系统的性能差异,排查ROM适配问题。
内容的提问来源于stack exchange,提问作者someone

