Android新Splash Screen API首次启动显示空白无图标问题求助
问题
迁移旧版含大量业务逻辑的SplashActivity至Android新Splash Screen API后,出现如下异常:
- 首次从Android Studio启动应用或安装APK启动时,闪屏显示空白无图标
- 从应用列表重启应用则显示正常
相关配置
v31+闪屏主题
<style name="AppSplashTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowSplashScreenBackground">...</item> <item name="android:windowSplashScreenAnimatedIcon">...</item> <item name="android:windowSplashScreenIconBackgroundColor">...</item> </style>
SplashActivity核心代码
SplashScreen splashScreen = SplashScreen.installSplashScreen(this); splashScreen.setKeepOnScreenCondition(() -> true);
解决方案
1. 修正闪屏主题的父类
新Splash Screen API要求主题必须继承自Theme.SplashScreen(而非AppCompat主题),同时指定闪屏结束后切换的目标主题:
<style name="AppSplashTheme" parent="Theme.SplashScreen"> <item name="android:windowSplashScreenBackground">@color/your_splash_bg</item> <item name="android:windowSplashScreenAnimatedIcon">@drawable/your_splash_icon</item> <item name="android:windowSplashScreenIconBackgroundColor">@color/your_icon_bg</item> <!-- 可选:设置闪屏动画时长 --> <item name="android:windowSplashScreenAnimationDuration">1000</item> <!-- 必须:指定闪屏结束后要切换的应用主题 --> <item name="postSplashScreenTheme">@style/YourAppTheme</item> </style>
2. 调整installSplashScreen的调用时机
必须在super.onCreate(savedInstanceState)之前调用installSplashScreen,确保系统优先初始化闪屏资源:
@Override protected void onCreate(Bundle savedInstanceState) { // 先安装闪屏,再执行super.onCreate SplashScreen splashScreen = SplashScreen.installSplashScreen(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); // 替换为实际的业务逻辑判断,避免一直返回true锁定闪屏 splashScreen.setKeepOnScreenCondition(() -> !isAppInitializationCompleted()); // 执行你的业务初始化逻辑 initAppBusinessLogic(); }
3. 检查闪屏图标资源
- 确保
windowSplashScreenAnimatedIcon使用**矢量图(VectorDrawable)**或符合Android规范的Drawable资源 - 图标尺寸需符合闪屏图标要求(建议432x432dp),避免因资源加载失败导致空白
4. 优化启动缓存问题
若仍存在首次启动空白,可在调试时清除应用数据验证;用户端无需额外操作,修正上述配置后系统可自动正确加载闪屏资源。
原因分析
- 主题父类错误:使用
Theme.AppCompat.NoActionBar作为父主题,导致系统无法识别新Splash Screen API的配置项,无法加载闪屏图标 - 调用时机错误:
installSplashScreen在super.onCreate之后调用,打断了系统闪屏的初始化流程 - 保持条件不合理:
setKeepOnScreenCondition一直返回true,导致闪屏在图标资源未完全加载时就被锁定,显示空白
内容的提问来源于stack exchange,提问作者Madhu
相关产品推荐
相关产品推荐

