Android 12 启动画面设置KeepVisibleCondition

Android 12 splash screen setKeepVisibleCondition

我正在尝试使用 android 12 SplashScreen 兼容库来实现启动画面。每次我的应用程序启动时,我都想从 API 中获取一些数据。因此启动画面应该等到 API 调用完成。我在文档中找到了这个 splashScreen.setKeepVisibleCondition() 函数,但不知道如何实现 KeepScreenOnCondition。如何让启动画面等待?任何帮助将不胜感激。

找到解决方案。

private var isLoading = true

override fun onCreate(savedInstanceState: Bundle?) {
    val splashScreen = installSplashScreen()
    splashScreen.setKeepVisibleCondition { isLoading }
}

private fun doApiCalls(){
    ...
    isLoading = false
}

@sujith 的回答出于某种原因对我不起作用。

我在我的 viewModel 中添加了一个方法,如下所示:

fun isDataReady(): Boolean {
    return isDataReady.value?:false
}

并使用

splashScreen.setKeepVisibleCondition {
    !viewModel.isDataReady()
}

这对我有用。 可能有人可以向我解释为什么 sujiths 的回答对我不起作用(一段时间后它隐藏了启动画面)。因为我知道我们俩本质上都在做同样的事情。

扩展 @hushed_voice 的回答,setKeepVisibleCondition() 只要它返回 true 就会保持启动画面。一旦它等于 false,Splash 将完成,您的应用程序将继续前进。

这是我编写的一个简短函数,用于在我的 Main Activity 中处理启动画面逻辑:

private fun splashScreen() {
    val splash = installSplashScreen()
    splash.setKeepVisibleCondition{
        viewModel.initialize()
    }
}

在我的 ViewModel 中,initialize() 函数执行一些异步工作,之后它 returns false。

fun initialize(): Boolean {
    return !isDataReady
}

直到那时我的闪屏出现了,之后它就消失了。您应该能够在此块中放入 API 调用,并使用 Reactive 库等待它们完成后再返回 false。这对我来说非常有效。