Android 12 启动画面 API 不一致的行为
Android 12 Splash Screen API inconsistent behavior
我正在实施新的启动画面 API 但遇到了不一致的行为。有时会显示带有应用程序图标的屏幕,有时不会。开头还有一个很长的白色屏幕,这明显很烦人(附加图像只是加速了 3 倍,因为我不能在这里上传大于 2mb 的图像文件,但是白色屏幕清晰可见几秒钟并且飞溅 API 似乎导致 Choreographer 日志跳帧)。
三星 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,但同时启动画面将保留,直到对话框被关闭。
我解决了这个问题,首先如果你想在用户屏幕上保留启动图标屏幕,你需要同时使用 setKeepOnScreenCondition
和 setOnExitAnimationListener
splashScreen.apply {
// Behaves like observable, used to check if splash screen should be keep or not
setKeepOnScreenCondition {
keepSplash // True to keep the screen, False to remove it
}
setOnExitAnimationListener {
// Do nothing so the splash screen will remain visible
}
}
请记住 setKeepOnScreenCondition
是一个 UI 阻塞线程,因此如果您在启动画面期间获取一些数据并通过对话框、Toast 或 SnackBar 显示错误消息,它将无法工作。您需要先将 setKeepOnScreenCondition
设置为 false。
这里emptysetOnExitAnimationListener
的作用是即使在setKeepOnScreenCondition
上设置了false条件也不会删除闪屏。
我正在实施新的启动画面 API 但遇到了不一致的行为。有时会显示带有应用程序图标的屏幕,有时不会。开头还有一个很长的白色屏幕,这明显很烦人(附加图像只是加速了 3 倍,因为我不能在这里上传大于 2mb 的图像文件,但是白色屏幕清晰可见几秒钟并且飞溅 API 似乎导致 Choreographer 日志跳帧)。
三星 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,但同时启动画面将保留,直到对话框被关闭。
我解决了这个问题,首先如果你想在用户屏幕上保留启动图标屏幕,你需要同时使用 setKeepOnScreenCondition
和 setOnExitAnimationListener
splashScreen.apply {
// Behaves like observable, used to check if splash screen should be keep or not
setKeepOnScreenCondition {
keepSplash // True to keep the screen, False to remove it
}
setOnExitAnimationListener {
// Do nothing so the splash screen will remain visible
}
}
请记住 setKeepOnScreenCondition
是一个 UI 阻塞线程,因此如果您在启动画面期间获取一些数据并通过对话框、Toast 或 SnackBar 显示错误消息,它将无法工作。您需要先将 setKeepOnScreenCondition
设置为 false。
这里emptysetOnExitAnimationListener
的作用是即使在setKeepOnScreenCondition
上设置了false条件也不会删除闪屏。