避免白屏-不使用SplashScreen

除了使用 Android 12+ 引入的 SplashScreen API,你还可以通过以下 传统方式(兼容 Android 低版本)来避免启动白屏现象:

✅ 一、使用自定义启动主题(最常见做法)

让系统在 App 界面未绘制前,展示自定义背景或 logo,而不是默认白色背景。

示例:

<!-- res/values/styles.xml -->
<style name="AppTheme.Launch" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_background</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>



<!-- res/drawable/splash_background.xml -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/white"/>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/ic_logo"/>
    </item>
</layer-list>



<!-- AndroidManifest.xml -->
<activity
    android:name=".MainActivity"
    android:theme="@style/AppTheme.Launch">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

📌 启动后替换为正常主题:

override fun onCreate(savedInstanceState: Bundle?) {
    // 恢复为正式主题
    setTheme(R.style.AppTheme)
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
}

✅ 二、减小首帧时间,快速首屏绘制

即便你设置了启动图,如果首屏绘制太慢,白屏问题依旧严重

优化点包括:

• ❌ 避免在 Application 或 MainActivity.onCreate() 中执行耗时操作;

• ✅ 启动页延后加载网络、数据库或图片;

• ✅ 延迟使用复杂自定义 View 或动画;

• ✅ 使用 ViewStub 或 ConstraintLayout 优化首屏布局;

• ✅ 开启 android:hardwareAccelerated=”true” 加快绘制;

✅ 三、使用 Window.setBackgroundDrawable() 提前手动设置背景(替代主题)

适用于运行时动态设置启动背景

override fun onCreate(savedInstanceState: Bundle?) {
    // 提前设置背景,避免默认白屏
    window.setBackgroundDrawableResource(R.drawable.splash_background)

    // 设置正式主题
    setTheme(R.style.AppTheme)
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
}

✅ 四、使用 LaunchActivity + Handler 跳转(不推荐)

老项目中常见做法:用一个独立的 SplashActivity 承载 logo 或广告页。

问题:

• 增加启动耗时;

• 跳转视觉不自然;

• 用户可能注意到“页面跳转”的闪动。

🔚 总结

方法 优点 缺点
✅ 自定义启动主题 简单、无跳转、过渡平滑 需小心资源大小和兼容性
✅ SplashScreen API(Android 12+) 官方推荐,过渡自然 仅支持 Android 12+
🚫 启动 Activity + Handler 跳转 可展示广告、逻辑清晰 跳转明显、增加延迟
✅ 提前设置背景或缩短初始化时间 实用、兼容性好 需良好代码结构

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器