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

Android 12多Activity应用自定义SplashScreen重复展示问题如何解决

解决方案

问题根因

你遇到的重复显示、温启动不生效问题核心来自两个原因:

  • 你使用的1.0.0-alpha01属于早期测试版本,存在大量已知兼容性bug
  • 额外新增独立SplashActivity的实现方式不符合SplashScreen API的设计逻辑,多Activity重复调用installSplashScreen()自然会导致每次Activity启动都触发一次启动页绘制

能否直接用系统SplashScreen API实现需求

可以。如果你的应用最小兼容版本为Android 12(API 31)及以上,直接用系统原生API就能实现需求,逻辑和Androidx compat库完全一致,不需要引入额外依赖。如果需要兼容Android 12以下的设备,优先使用稳定版Androidx SplashScreen compat库,它会在低版本自动模拟和系统一致的启动页行为。

正确实现步骤(兼容全版本,和系统默认启动页行为完全一致)

1. 升级依赖

首先把1.0.0-alpha01版本的SplashScreen compat库替换为最新稳定版:

implementation "androidx.core:core-splashscreen:1.0.1"

2. 移除独立的SplashActivity

SplashScreen API不需要单独的启动页Activity,直接在入口Activity配置即可,避免跳转触发重复绘制。

3. 全局配置自定义启动页主题

在应用的主主题中配置自定义的图标和背景:

<style name="AppTheme" parent="Theme.SplashScreen">
    <!-- 启动页背景色 -->
    <item name="windowSplashScreenBackground">@color/your_bg_color</item>
    <!-- 自定义启动页图标,支持静态/动图 -->
    <item name="windowSplashScreenAnimatedIcon">@drawable/your_custom_icon</item>
    <!-- 启动页消失后应用使用的正常主题 -->
    <item name="postSplashScreenTheme">@style/YourAppNormalTheme</item>
</style>

并将这个主题设置为你应用的android:theme属性值。

4. 仅在入口Activity调用初始化方法

只需要在应用的入口Activity(通常是MainActivity)的onCreate方法中,super.onCreate执行前调用installSplashScreen()即可,其他所有Activity不需要调用该方法:

override fun onCreate(savedInstanceState: Bundle?) {
    val splashScreen = installSplashScreen()
    super.onCreate(savedInstanceState)
    // 可选:控制启动页保留时长,比如等应用初始化完成再消失
    splashScreen.setKeepOnScreenCondition {
        !appInitFinished()
    }
    setContentView(R.layout.activity_main)
}

按上述配置后,不管冷启动、温启动场景,系统都会自动展示一次自定义启动页,Activity跳转不会触发重复显示,行为和系统默认SplashScreen完全一致,仅图标、背景为你自定义的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:18:02