SplashScreen代码解读

这段代码:

splashScreen.setKeepOnScreenCondition {
    viewModel.isLoading
}

是在设置 系统 SplashScreen 是否应该继续保留(不移除) 的条件。让我们逐行分解说明:

🔍 方法解析

setKeepOnScreenCondition(condition: () -> Boolean)

这是 SplashScreen 提供的一个方法,它的作用是:

只要你传入的 condition() 返回 true,SplashScreen 就不会消失

当 condition() 变成 false 时,系统会自动把 SplashScreen 移除,并过渡到主界面。

上下文示例

val splashScreen = installSplashScreen()

splashScreen.setKeepOnScreenCondition {
    viewModel.isLoading
}

这表示:

• viewModel.isLoading 是一个布尔变量;

当 isLoading == true 时,Splash 保留不移除

• 当你在 ViewModel 中把它设置成 false(比如数据加载完毕后),Splash 才会自动消失。

应用场景(为什么这么设计?)

我们经常在 onCreate() 中初始化数据,比如:

viewModelScope.launch {
    delay(2000) // 模拟加载
    isLoading = false
}

此时:

• 如果不加 setKeepOnScreenCondition(),系统可能会在第一帧绘制后立刻移除 Splash,导致“黑一下”或加载界面没准备好;

• 加了这个判断,就可以让 SplashScreen 撑住界面,等数据准备好了再过渡,体验更自然。

补充:它是循环检查的!

SplashScreen 会在后台每帧检查 condition() 返回值:

• 如果 true → 保留 Splash;

• 如果 false → 播放过渡动画后移除。

小贴士

• 你可以传入任意逻辑:例如观察 LiveData、状态流、动画结束、广告完成 等;

• 推荐不要超过 2-3 秒,避免用户感知“卡顿”;

• 一旦 onCreate() 返回后,SplashScreen 的保留只能通过此方法控制,不能再手动显示

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器