You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose开发安卓UI组件遇Cannot skip异常致应用崩溃

Jetpack Compose崩溃异常:Cannot skip the enclosing group while in an empty region

在Jetpack Compose开发原生Android应用UI组件时,可能会触发以下崩溃异常:

java.lang.IllegalArgumentException: Cannot skip the enclosing group while in an empty region
        at androidx.compose.runtime.SlotReader.skipToGroupEnd(SlotTable.kt:940)
        at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2378)
        at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2618)
        at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3205)
        at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3183)
        at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:252)
        at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:1)
        at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3183)
        at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:3148)
        at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:746)
        at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:876)
        at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:107)
        at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:485)
        at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:454)
        at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:34)
        at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
        at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
        at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1456)
        at android.view.Choreographer.doCallbacks(Choreographer.java:1256)
        at android.view.Choreographer.doFrame(Choreographer.java:946)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1443)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:264)
        at android.app.ActivityThread.main(ActivityThread.java:8315)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
        Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@eb6b6ad, androidx.compose.ui.platform.MotionDurationScaleImpl@642ade2, StandaloneCoroutine{Cancelling}@a2b1573, AndroidUiDispatcher@ed35c30]

常见原因与修复方案

  • 条件分支UI结构不匹配:if/else、when等条件分支中,返回的Composable结构不一致(比如一个分支用Column包裹,另一个直接返回单个控件),会导致重组时SlotTable异常。
    • 修复:统一条件分支的UI结构,用Box或Column包裹所有分支的内容,给动态元素添加稳定的key。
  • Lazy列表项异常:LazyColumn/LazyRow中某个item返回空内容或无效Composable,触发重组错误。
    • 修复:确保每个列表item都返回有效Composable,避免返回null,空内容可以用Spacer或占位符替代。
  • Compose版本bug:旧版本Compose Runtime(如1.2.x及更早)存在此类重组逻辑问题。
    • 修复:升级Compose相关依赖到最新稳定版,例如androidx.compose.runtime:runtime:1.6.0及以上。
  • DerivedStateOf使用错误:异常栈涉及observeDerivedStateRecalculations,说明derivedStateOf中引用了不稳定状态,或计算逻辑触发异常重组。
    • 修复:检查derivedStateOf的依赖项,仅引用稳定State对象,简化计算逻辑,避免在其中触发额外重组。

内容的提问来源于stack exchange,提问作者Atul Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:57:43