告别启动页“翻车”!Android最新SplashScreen方案全解析

40 阅读8分钟

告别启动页“翻车”!Android最新SplashScreen方案全解析

启动页的前世今生

早期的 Android 应用启动页可谓相当 “质朴”,通常就是一个静态的 Logo 搭配简单的渐变背景 ,基本没什么设计感。随着 Android 系统不断升级,Google 在 Android 12 推出了全新的 SplashScreen API,为启动页带来了更多的可能性。

在这之前,传统的启动页实现方案主要是通过设置主题的windowBackground属性,将其设置为一张图片,以此来实现类似闪屏的效果。但这种方式存在诸多问题,比如对启动页的控制力度较弱,不同设备和系统版本上的显示效果可能会有差异,并且很难实现一些复杂的动画和交互效果。

而新的 SplashScreen API 则有了质的飞跃。它由 System UI 直接管理,开发者无需再手动编写复杂的延迟跳转逻辑。同时,它支持AnimatedVectorDrawable动画,能让启动页的图标 “动” 起来,极大地增强了视觉效果。并且,新方案对深色模式的适配也更加友好,一套配置就能轻松搞定日间和夜间模式下的启动页展示,避免了不同模式下显示异常的尴尬情况。

最新 SplashScreen 方案优势大放送

(一)系统级接管,省心省力

在以前,为了实现启动页的正常跳转,开发者们需要小心翼翼地编写延迟跳转逻辑 ,就像在走钢丝,稍微不注意就可能出现跳转时机不对的问题。比如,延迟时间设置得太短,应用还没准备好就跳转了,导致界面卡顿;设置得太长,又会让用户等得不耐烦。而现在,最新的 SplashScreen 方案由 System UI 直接管理,这就好比请了一个专业的管家来处理这些繁琐的事务。开发者再也不用操心延迟跳转的问题,只需要专注于其他更重要的功能开发,大大节省了开发时间和精力。

(二)动画自由,启动页 “活” 起来

新的 SplashScreen 方案支持AnimatedVectorDrawable动画,这可真是给启动页注入了一剂 “活力针” 。想象一下,以前的启动页图标就像一个安静的雕像,一动不动,而现在,图标可以像一个活泼的小精灵一样动起来。它可以旋转、缩放、变色,通过各种动画效果来展示品牌的个性与魅力。比如,某个音乐类应用的启动页图标,在 SplashScreen 上就可以设计成一个跳动的音符,随着音乐的节奏闪烁、舞动,瞬间就能吸引用户的注意力,让用户在等待应用启动的短暂时间里,也能获得有趣的视觉体验,仿佛在告诉用户:“快来,这里有一场精彩的音乐盛宴等你开启!”

(三)深色模式适配,全天候舒适体验

如今,越来越多的用户喜欢在夜间使用手机,并且开启深色模式来保护眼睛。最新 SplashScreen 方案在这方面就做得非常贴心,一套配置就能轻松实现日间与夜间模式的适配 。在日间模式下,启动页的颜色和图标清晰明亮,与周围的环境相得益彰;而当用户切换到夜间模式时,启动页也会自动调整为深色主题,图标和文字的颜色也会相应变化,保证在黑暗环境下也能清晰可读,不会因为过于刺眼而让用户感到不适。就像一个贴心的小助手,时刻关注着用户的使用场景和需求,为用户提供最舒适的视觉体验。

实战教程:三步上手新方案

(一)引入 “神器” 库

要使用最新的 SplashScreen 方案,首先得引入对应的库。打开项目中的app/build.gradle文件 ,在dependencies闭包中添加如下依赖:


dependencies {
    implementation 'androidx.core:core-splashscreen:1.0.1'
}

这里的1.0.1是版本号,大家记得要关注最新版本,及时更新 ,以免错过一些重要的功能优化和 Bug 修复。就好比你开着一辆车,定期给它更新零件,才能保证它跑得又快又稳。引入这个库,就像是给你的项目请来了一个得力助手,为后续实现炫酷的启动页效果打下坚实的基础。

(二)定义主题 “皮肤”

有了库之后,接下来就得给启动页定义一个专属的主题 “皮肤” 了 。在res/values/themes.xml文件中,创建一个新的样式,如下:


<style name="Theme.App.Splash" parent="Theme.SplashScreen">
    <!-- 设置启动页背景颜色 -->
    <item name="windowSplashScreenBackground">@color/splash_bg</item>
    <!-- 设置启动页动画图标,记得要是Adaptive Icon格式的.xml文件哦 -->
    <item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher_foreground</item>
    <!-- 设置动画时长,单位是毫秒 -->
    <item name="windowSplashScreenAnimationDuration">300</item>
    <!-- 设置启动页消失后显示的主题 -->
    <item name="postSplashScreenTheme">@style/Theme.App</item>
</style>

在这里,windowSplashScreenBackground设置了启动页的背景颜色,你可以根据自己应用的风格来选择合适的颜色,比如电商类应用可能会选择热情的橙色,而阅读类应用可能会选择淡雅的蓝色。windowSplashScreenAnimatedIcon则指定了启动页的动画图标 ,这个图标可是启动页的 “门面担当”,它的动画效果能瞬间抓住用户的眼球。windowSplashScreenAnimationDuration控制着动画的时长,时间太短,用户可能还没看清楚就结束了;时间太长,又会让用户觉得不耐烦,所以要根据实际情况合理设置。最后,postSplashScreenTheme定义了启动页消失后应用显示的主题,保证了界面过渡的流畅性。

(三)设置与跳转

最后一步,就是在AndroidManifest.xml文件中进行相关设置,并在启动 Activity 中处理跳转逻辑 。在AndroidManifest.xml中,找到启动 Activity 的声明,为其设置我们刚刚定义的 Splash 主题:


<activity
    android:name=".SplashActivity"
    android:exported="true"
    android:theme="@style/Theme.App.Splash">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

然后,在SplashActivityonCreate方法中,处理跳转逻辑 。比如,我们可以在初始化完成后,延迟一段时间跳转到主 Activity:


import android.os.Bundle;
import android.os.Handler;
import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.splashscreen.SplashScreen;

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 必须在super.onCreate()之前调用
        SplashScreen splashScreen = SplashScreen.installSplashScreen(this);
        super.onCreate(savedInstanceState);

        // 模拟初始化操作,这里可以替换为真实的初始化逻辑
        new Handler().postDelayed(() -> {
            // 初始化完成,跳转到主Activity
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            finish();
        }, 2000); // 延迟2秒跳转
    }
}

这里,SplashScreen.installSplashScreen(this)这行代码很关键,它负责安装 SplashScreen,一定要在super.onCreate()之前调用 。然后,通过Handler延迟 2 秒,模拟初始化操作完成后,使用Intent跳转到主 Activity,并调用finish()方法关闭当前的 SplashActivity,这样就完成了整个启动页的设置与跳转流程。

适配过程中的注意事项

(一)兼容性处理

虽然新的 SplashScreen 方案很强大,但如果你的应用还需要支持 Android 11 及以下版本,就不能单纯依靠新的 API 了 。这时,可以结合CoreSplashScreen兼容库(androidx.core:core-splashscreen:1.0.1+)来实现兼容。在使用兼容库时,配置方式和新 API 类似,但需要注意版本的兼容性,避免出现不兼容的情况。就好比你要给不同年龄段的人准备礼物,得根据他们的喜好和需求来挑选,才能皆大欢喜。当然,如果是全新开发的项目,建议直接以 Android 12 + 为目标,充分享受新方案带来的便利,逐步弃用自定义Handler方案,让开发更加简洁高效。

(二)图标规范

在设置启动页动画图标时,一定要注意windowSplashScreenAnimatedIcon必须为 Adaptive Icon 格式 。这就像是给启动页图标穿上了一件 “万能外衣”,能让它在各种设备上都能完美展示。如果使用其他格式的图标,在部分设备上可能会出现显示异常,比如图标显示为空白或者被裁剪得乱七八糟,就像一个穿着不合身衣服的人,怎么看都别扭。Adaptive Icon 由背景(background)、前景(foreground)和单色(monochrome)组成,在配置图标资源时,要确保这些部分都正确设置,这样才能让启动页图标在屏幕上大放异彩。

(三)性能优化

启动页是应用给用户的第一印象,所以性能至关重要 。在启动页期间,要避免执行耗时操作,比如加载大图片、进行复杂的数据库查询等。这些操作就像一个个 “小怪兽”,会拖慢应用的启动速度,让用户等得不耐烦。启动页应该只做一些轻量级的检查和初始化工作,把那些耗时的 “重活” 交给主 Activity 的onCreate方法或者后台协程去处理。就好比你请客吃饭,在客人来之前,先把简单的准备工作做好,像摆好餐具、泡好茶水,而把复杂的烹饪工作留到后面,这样既能让客人很快感受到你的热情,又能保证饭菜的质量。