SuperAPI AI 工具集

using-strong-skipping-correctly

通用与其它

查看项目

更新于 10-16 00:21

技能介绍

用途:帮助开发者正确理解并使用 Jetpack Compose 的强跳过模式(Strong Skipping)。该模式自 Kotlin 2.0.20 的 Compose 编译器插件起默认开启,使每个可重启(restartable)的 composable 都变为可跳过(skippable),不稳定参数用 === 比较、稳定参数用 equals 比较;@Composable 函数内捕获变量的 lambda 字面量会被自动包裹为 remember(captures) { ... },无捕获的 lambda 本就是编译器生成的单例,不会被包裹。

主要能力与用法:先确认工具链版本,可用 ./gradlew :app:dependencies --configuration kotlinCompilerPluginClasspathRelease | grep -i compose 检查;在 Kotlin 2.0.20+ 上如需关闭,使用 composeCompiler { featureFlags.add(ComposeFeatureFlag.StrongSkipping.disabled()) },旧的 enableStrongSkippingMode = true 已标记为 @Deprecated。随后生成 Compose 编译器报告并检查 *-composables.txt 中是否显示 restartable skippable。审计 @Composable 作用域内的 lambda 捕获点,注意 LazyListScope.items { }、Modifier.pointerInput { }、对象表达式、SAM 转换、drawBehind 等非 @Composable 作用域不会被自动 memoize,需要手动 remember 或使用方法引用。必要时使用退出机制:@DontMemoize(仅作用于表达式,用于刻意每次捕获新值的 lambda)、@NonSkippableComposable(仅副作用 composable)、@NonRestartableComposable、@ReadOnlyComposable。可用 @TraceRecomposition 在运行时验证是否跳过。

适用场景:迁移到 Kotlin 2.0.20+ 后核对报告、排查 composable 仍频繁重组、判断 lambda 是否每次重组都分配、遇到 @DontMemoize 或 @NonSkippableComposable 时。

限制:强跳过不消除对 @Immutable / @Stable 的需求,热路径中的不稳定类型仍应标记稳定类型以避免 === 比较失败;@DontMemoize 在应用代码中很少需要,应先测量再使用;报告应在 release 构建下阅读,debug 的 Live Literals 会干扰跳过行为。资料未提供具体收费、平台或效果数据。