我正在实现新的启动画面API,但遇到了不一致的行为。有时屏幕与应用程序图标显示,有时它不。还有一个长长的白色屏幕上的开始,这是明显恼人的(附件中的图像只是加快了3倍,因为我不能上传图像文件高于2MB在这里,但白色屏幕清晰可见了几秒钟,飞溅API似乎导致跳帧从编舞日志)。
三星J1 Android L
的数据
class LauncherActivity : AppCompatActivity() {
private var keepSplash = true
private lateinit var splashScreen: SplashScreen
override fun onCreate(savedInstanceState: Bundle?) {
splashScreen = installSplashScreen().apply {
// Behaves like observable, used to check if splash screen should be keep or not
setKeepOnScreenCondition {
keepSplash
}
setOnExitAnimationListener { sp ->
sp.remove() // Remove splash screen
}
}
super.onCreate(savedInstanceState)
}
fun fetchData() {
//Fetching network data...
keepSplash = false
}
字符串
显示AlertDialog似乎不起作用,除非我最小化应用程序并使用setKeepOnScreenCondition
重新打开它。它似乎阻止了UI线程,是否有其他方法可以保留飞溅而不是阻止UI?目前,我们需要显示AlertDialog,如果出现问题,但同时启动画面将被保留,直到对话框被关闭。
1条答案
按热度按时间uinbv5nw1#
我解决了这个问题,首先,如果你想在用户屏幕上保留启动图标屏幕,你需要同时使用
setKeepOnScreenCondition
和setOnExitAnimationListener
字符串
或只是
型
然后在完成后调用
splashScreenViewProvider.remove()
。只要记住
setKeepOnScreenCondition
可以是一个UI阻塞线程,所以如果你在启动屏幕期间获取一些数据,并通过对话框,吐司或SnackBar显示错误消息,它就不会工作。你需要先将setKeepOnScreenCondition
设置为false。这里空
setOnExitAnimationListener
的作用是即使在setKeepOnScreenCondition
上设置假条件后也不删除闪屏。已关闭
如果你想控制和扩展闪屏,最好使用并清空
setOnExitAnimationListener
。然后保存它的splashScreenViewProvider
在一个变量中,稍后通过调用remove()
来控制或关闭屏幕。文档在这里。由于热启动和冷启动的工作方式,有时飞溅标志可能不会显示。https://developer.android.com/develop/ui/views/launch/splash-screen#how
请注意,在Android Studio中直接使用USB调试安装和运行应用程序时仍然存在问题,其中SplashScreen从未显示并停留在空屏幕中,当您使用Firebase Test Lab时可能会出现问题。该问题仅发生在SDK 31和32中。
https://issuetracker.google.com/issues/197906327