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

如何正确搭配使用SplashScreen compat库与Jetpack Compose?

SplashScreen compat库与Jetpack Compose搭配使用解决方案

可以正常搭配使用,你遇到的退出动画无法播放完毕的问题,核心原因是setContent会替换Window根布局下的内容视图,和SplashScreen的退出动画生命周期产生冲突,无需延迟调用setContent,有两种性能无损的最优解决方案:


方案1:使用setKeepOnScreenCondition控制闪屏展示时机(官方推荐)

该方案可以让Compose渲染和闪屏展示并行执行,完全没有性能损耗,等Compose首帧渲染完成后自动触发闪屏退出动画,动画可完整播放。
代码示例:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val splashScreen = installSplashScreen()
        var isComposeContentReady = false

        // 闪屏保持展示,直到Compose内容准备完成
        splashScreen.setKeepOnScreenCondition {
            !isComposeContentReady
        }

        setContent {
            AppTheme {
                // 你的业务根组件
                MainScreen()

                // 首帧组合完成后标记准备就绪
                LaunchedEffect(Unit) {
                    isComposeContentReady = true
                }
            }
        }
    }
}

方案2:使用setOnExitAnimationListener自主控制闪屏退出逻辑

适合需要自定义闪屏退出动画、或者需要和Compose入场效果做联动的场景,你可以完全控制闪屏视图的移除时机,不会被setContent的视图替换逻辑影响。
代码示例:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val splashScreen = installSplashScreen()
        
        splashScreen.setOnExitAnimationListener { splashScreenView ->
            // 自定义退出动画,可根据需求调整动画类型、时长
            val fadeOutAnim = ObjectAnimator.ofFloat(
                splashScreenView,
                View.ALPHA,
                1f,
                0f
            ).apply {
                duration = 800
                interpolator = AccelerateDecelerateInterpolator()
                doOnEnd {
                    // 动画播放完毕后主动移除闪屏视图
                    splashScreenView.remove()
                }
            }
            fadeOutAnim.start()
        }

        setContent {
            AppTheme {
                MainScreen()
            }
        }
    }
}

注意事项

  • 不要额外给Activity主题设置windowBackground作为旧版闪屏兜底,直接按SplashScreen compat库的要求配置主题属性即可,避免样式冲突
  • setKeepOnScreenCondition的判断条件要尽量轻量,不要放入耗时逻辑,避免闪屏页长时间无意义展示

内容的提问来源于stack exchange,提问作者Felix Wunderlich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:00:01