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 的保留只能通过此方法控制,不能再手动显示。