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

如何正确实现不依附应用进程的Android Splash启动屏

问题1:属性无法解析报错的解决方法

Cannot resolve symbol 'android:windowSplashScreenBackground'报错的根本原因是这些属性为Android 12(API等级31)新增的系统级属性,解决方案分两种场景:

  • 若应用仅需适配Android 12及以上版本,直接将模块级build.gradle中的compileSdkVersion升级到31及以上,IDE即可自动识别对应属性。
  • 若需要兼容更低Android版本,不可直接使用原生系统属性,需引入Jetpack官方提供的SplashScreen兼容库。

问题2:替代实现方案

主流无黑屏的启动屏实现有两种,均不需要单独编写延时跳转的SplashScreenActivity:

方案1:Jetpack SplashScreen兼容库(推荐)

可兼容到Android 6.0(API 23),和系统原生启动屏逻辑完全一致:

  1. 先在模块级build.gradle添加依赖:
dependencies {
    implementation "androidx.core:core-splashscreen:1.0.1"
}
  1. 新增启动专用主题,不再使用android:开头的原生属性,改用兼容库属性:
<style name="Theme.Books.Splash" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">@color/black</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/books_logo</item>
    <item name="windowSplashScreenAnimationDuration">1000</item>
    <item name="postSplashScreenTheme">@style/Theme.Books</item>
</style>
  1. 将AndroidManifest.xml中主启动Activity的主题设置为Theme.Books.Splash,之后在主Activity的onCreate方法的super.onCreate调用前添加installSplashScreen()即可:
override fun onCreate(savedInstanceState: Bundle?) {
    val splashScreen = installSplashScreen()
    super.onCreate(savedInstanceState)
    // 原有业务逻辑无需修改
}

方案2:传统窗口背景方案(全版本兼容)

若需要兼容Android 6.0以下版本,可使用这套经过长期验证的方案:

  1. 新建启动专用主题,设置窗口背景为启动屏素材:
<style name="Theme.Books.Launcher" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="android:windowBackground">@drawable/launcher_background</item>
    <item name="android:statusBarColor">@color/black</item>
</style>
  1. 主启动Activity在Manifest中使用该启动主题,之后在onCreate的super.onCreate执行后、setContentView执行前切回正常应用主题:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setTheme(R.style.Theme_Books)
    setContentView(R.layout.activity_main)
}

这套方案下,系统加载应用进程时会直接显示设置的windowBackground,完全不会出现黑屏,和Google Play Store、WhatsApp的实现逻辑一致。

问题3:遗漏配置与进程分离相关说明

  1. 遗漏的核心配置是未将compileSdkVersion升级到31及以上,也未引入Jetpack兼容库,因此IDE无法识别Android 12新增的启动屏属性。
  2. 不存在将启动屏Activity与应用进程分离的方案,之前遇到的黑屏问题,本质是自定义的SplashScreenActivity需要等待应用进程初始化完成、Activity执行到onCreate的setContentView才会渲染布局,而系统层面的窗口背景是在进程加载阶段就由系统直接绘制,不需要等待应用进程初始化完成,因此不会出现黑屏。无需单独编写SplashScreenActivity,使用上述两种方案直接给主Activity配置启动主题即可,既没有黑屏问题,也不会存在跳转闪屏的体验缺陷。

内容的提问来源于stack exchange,提问作者Ronnie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:03