You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API 33闪屏页实现后应用崩溃问题求助

Android API 33闪屏页实现崩溃问题排查与修复

问题情况

在API 33环境下使用AndroidX SplashScreen库实现闪屏页时,闪屏页正常显示后应用直接崩溃。已引入依赖 implementation 'androidx.core:core-splashscreen:1.0.1',按教程配置了主题、Manifest及Activity代码,但添加setContent{}时会报错。

以下是原配置代码:

原主题配置

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="Theme.BookTFGNormal.MySplash" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">#FFFFFF</item>
        <item name="android:windowSplashScreenAnimatedIcon" tools:targetApi="s">@drawable/icon_book</item>
        <item name="postSplashScreenTheme">@style/Theme.SplashScreen </item>
    </style>
</resources>

原Manifest中MainActivity配置

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:theme="@style/Theme.BookTFGNormal.MySplash">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

原MainActivity代码

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    installSplashScreen()
    // 添加setContent{}时会报错
}

崩溃原因分析

  1. 主题循环引用:postSplashScreenTheme设置为闪屏主题本身,闪屏结束后触发主题切换,导致无限循环引发崩溃。
  2. 图标属性兼容问题:使用带android:前缀的windowSplashScreenAnimatedIcon,未利用SplashScreen库的向下兼容能力,可能引发API 33下属性解析异常。
  3. setContent调用顺序错误:installSplashScreen()必须在setContent/setContentView之前调用,顺序颠倒或布局配置不当会触发报错。

修复步骤

1. 修正闪屏主题配置

将postSplashScreenTheme改为应用主主题,同时调整图标属性写法:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="Theme.BookTFGNormal.MySplash" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">#FFFFFF</item>
        <!-- 使用不带android:前缀的属性,由库处理兼容 -->
        <item name="windowSplashScreenAnimatedIcon" tools:targetApi="s">@drawable/icon_book</item>
        <!-- 替换为你的应用主主题,示例为@style/Theme.BookTFGNormal -->
        <item name="postSplashScreenTheme">@style/Theme.BookTFGNormal</item>
    </style>
</resources>

2. 调整MainActivity代码顺序

确保installSplashScreen()在setContent/setContentView之前调用,针对不同场景处理:

情况1:使用ViewBinding/传统布局

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // 先安装闪屏页
    installSplashScreen()
    // 再设置布局
    setContentView(R.layout.activity_main)
}

情况2:使用Jetpack Compose

若为Compose项目,需确认已引入Compose依赖,再按顺序调用:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    installSplashScreen()
    setContent {
        BookTFGNormalTheme {
            Surface(modifier = Modifier.fillMaxSize()) {
                Text(text = "主页面内容")
            }
        }
    }
}

3. 排查setContent报错细节

若仍报错,检查以下几点:

  • 若使用Compose,确认build.gradle中已添加Compose依赖及相关配置。
  • 若使用传统布局,确认布局文件activity_main.xml存在且无语法错误。
  • 确保MainActivity继承自AppCompatActivity或ComponentActivity(SplashScreen库要求)。

内容的提问来源于stack exchange,提问作者pablo ureña simón

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:20:28