Android 12(API Level 31)应用卡在Splash Screen启动页问题求助
问题排查与修复方案
1. 升级SplashScreen依赖版本
你当前使用的1.0.0-alpha01属于早期预览测试版,存在大量未修复的原生bug,是启动页卡住的高频诱因,先替换为官方稳定版:
implementation 'androidx.core:core-splashscreen:1.0.1'
2. 补充Splash主题缺失配置
你的SplashTheme缺少启动页结束后切换到应用正常主题的配置项,系统无法完成启动页到应用页面的过渡,修改如下:
<style name="SplashTheme" parent="Theme.SplashScreen"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="windowSplashScreenAnimatedIcon">@drawable/splash</item> <!-- 新增:配置启动页结束后切换的应用正常主题 --> <item name="postSplashScreenTheme">@style/你的App正常使用的主主题名</item> </style>
3. 修正StartupActivity逻辑
当前存在两个核心问题:
- 无手动控制启动页退出逻辑的前提下,空内容的Activity无法完成第一帧绘制,系统会一直保留启动页
- 跳转逻辑没有和启动页退出时机绑定
修改后的代码如下:
// 标记是否已经完成跳转 private var isNavigated = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val splashScreen = installSplashScreen() // 手动控制启动页保持可见的条件 splashScreen.setKeepOnScreenCondition { !isNavigated } // 即使无业务布局,也可设置一个空白布局保证页面绘制完成 setContentView(R.layout.activity_startup) } override fun onStart() { super.onStart() proceedNavigation() } private fun proceedNavigation() { // 保留原有跳转逻辑,跳转完成后修改标记位即可触发启动页关闭 // 示例:跳转主页后执行 // isNavigated = true // finish() }
4. 其他注意项
- 确保应用主主题继承自
Theme.MaterialComponents、Theme.AppCompat这类兼容主题,不能使用原生Framework的主题 - Android 12及以上设备无需单独做系统级启动页适配,AndroidX兼容包会自动处理不同版本的展示逻辑
内容的提问来源于stack exchange,提问作者Umer Iqbal
相关产品推荐
相关产品推荐

