Android 12 启动画面设置KeepVisibleCondition

Posted

技术标签:

【中文标题】Android 12 启动画面设置KeepVisibleCondition【英文标题】:Android 12 splash screen setKeepVisibleCondition 【发布时间】:2022-01-16 18:32:04 【问题描述】:

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

【问题讨论】:

【参考方案1】:

找到了解决办法。

private var isLoading = true

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


private fun doApiCalls()
    ...
    isLoading = false


【讨论】:

这对我不起作用。【参考方案2】:

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

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

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

使用过

splashScreen.setKeepVisibleCondition 
    !viewModel.isDataReady()

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

【讨论】:

【参考方案3】:

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

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

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

在我的 ViewModel 中,initialize() 函数做了一些异步工作,之后它返回 false。

fun initialize(): Boolean 
    return !isDataReady

在此之前,我的启动画面会出现,之后它就会消失。您应该能够在此块中抛出您的 API 调用,并使用反应式库等待它们完成,然后返回 false。这对我来说非常有效。

【讨论】:

以上是关于Android 12 启动画面设置KeepVisibleCondition的主要内容,如果未能解决你的问题,请参考以下文章

Android 12 新APP启动画面(SplashScreen API)简介&&源码分析

如何将启动画面设置为全屏?

Android 12 启动画面-SplashScreen

Android 12 启动画面-SplashScreen

Android 12之启动画面Splash Screens -- 适配

PhoneGap Build - 为 Android 设备设置启动画面