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)简介&&源码分析