React Native: 2026 年全面指南
移动应用 指南

2026年React Native全面的启动屏幕指南

了解如何在Expo & CLI 中实现专业的启动屏幕。 本指南涵盖了资产准备、原生设置、性能和常见问题。

马丁·多纳迪厄

马丁·多纳迪厄

内容营销

2026年React Native全面的启动屏幕指南

当你在真机上点击应用图标时,用户会在一瞬间看到白色闪烁、拉伸的Logo或冻结的启动屏幕,随后它会消失,直到有任何有意义的内容准备好。 这通常是React Native应用停止感觉像生产级应用的时刻。

一个好的启动屏幕在React Native中不仅仅是品牌问题。它填补了原生启动和第一个有意义的React渲染帧之间的空白。它还迫使你清晰地思考启动顺序、资产准备和Expo Go开发客户端和真实商店构建之间的区别。如果你错过了这个时间点,用户就会马上看到裂缝。

目录

为什么专业的启动屏幕很重要

A用户从主屏幕点击你的应用,启动序列显示一个空白白色框架,直到第一个UI出现。在生产环境中,这意味着不稳定。无论React Native是否仍在加载JavaScript包或在后台恢复状态,这个第一印象已经错了。

在React Native中,启动屏幕是你应用控制的第一个原生界面。它覆盖了进程启动和第一个可用的React渲染帧之间的过渡。这使得它成为一个启动工具,而不是仅仅是一个品牌资产。如果你时间得当,用户会看到一个稳定的启动,感觉是有意图的。如果你隐藏它太早,他们会看到布局抖动、缺失的字体或一个死的屏幕,直到认证、导航或远程配置赶上。

一位表情担忧的男子正在看他的智能手机上的一个空白白色屏幕。

启动屏幕实际上在做什么

一个生产环境的启动屏幕通常需要处理四个启动问题:

  • 遮盖原生到JS启动工作: 字体加载、持久会话恢复、特性标志读取和初始导航状态都在竞争第一个帧。
  • 防止视觉抖动: 它避免闪烁的系统白色、未样式的文本或一个部分挂载的根视图。
  • 保持启动视觉一致: 背景颜色和Logo可以与你的应用壳匹配,使过渡感觉受控。
  • 强制启动决策: 团队必须在移除启动屏幕之前定义什么是“就绪”的含义。

实用规则: 在第一屏幕可以清晰地渲染时隐藏启动屏幕,而不是在任意延迟后。

这也是Expo管理和裸CLI工作流程开始分离的地方。在Expo管理的项目中,启动屏幕的设置主要是声明性的,主要的工程决策是何时调用隐藏API,基于应用程序的就绪状态。在裸React NativeCLI项目中,您拥有更多的Android和iOS原生设置,这给您更多的控制权,但也更容易引入启动屏幕闪烁、主题不匹配或平台特定回归问题。

这种权衡在实际项目中很重要。Expo更快地配置和更容易保持一致性跨环境。裸项目通常是当应用程序已经依赖于自定义原生模块、自定义启动行为或更严格的启动路径控制时的合适选择。

通常会将启动作为产品质量的一部分进行评估的团队会在更广泛的UX工作中进行评估,而不是将其视为孤立的原生任务。这与__CAPGO_KEEP_0__的应用程序用户体验指南所涵盖的相同思维方式。如果您还在评估React Native堆栈以用于新应用程序或迁移, Capgo’s guide to app user experience将提供一个有用的生产环境概述。 准备完美的启动屏幕资源 大多数启动屏幕错误都起源于设计文件,而不是__CAPGO_KEEP_0__。如果基础资源是错误的,那么任何Android XML或iOS storyboard清理都无法挽救它。

__CAPGO_KEEP_0__

Most splash screen bugs start in design files, not code. If the base asset is wrong, no amount of Android XML or iOS storyboard cleanup will save it.

最安全的方法是将启动屏幕视为 布局系统,而不是单个全屏幕图片。使用背景颜色加上居中的Logo或插图。它在Android设备、iPhone、平板电脑和更宽的设备方向上缩放得更可预测,而不是试图在所有地方放入一个详细的海报式图片。

一个检查清单,说明了设计完美的移动应用启动屏幕资产所需的四个基本要求。

在编码之前准备什么

从设计开始,使用干净的源文件。矢量是最佳选择,即使导出的启动资产是PNG。

使用此检查清单:

  • 源艺术作品: 保持一个可编辑的源格式(如SVG、AI等)中的主Logo或标志,以确保导出的图像一致。
  • 背景颜色: 在编码前定义准确的启动屏幕背景颜色,并确保它与第一屏幕或应用壳背景颜色匹配。
  • 安全边距: 保持logo周围的空白区域,以避免在不常见的比例下进行激进的裁剪,损害设计。
  • 平台变体: 导出您的工作流程需要的图像大小,而不是将一个文件拉伸到所有地方。
  • 暗色模式审查: 如果您的应用程序支持暗色表面,请确认Logo仍然清晰可读,背景颜色为所选颜色。

Expo的指导是有用的,因为它强调了启动资产现在是构建管道的一部分,而不是后来的事情。它的文档建议使用 1024×1024像素的正方形PNG 用于应用程序图标,并指出EAS Build可以为使用 npx create-expo-app创建的项目生成所需大小,这表明了资产生成已经转移到现代工具中,而不是手动重复。

常见资产错误

最常见的视觉故障是可预测的:

问题 可能的原因 更好的方法
模糊的Logo 从低分辨率的栅格中导出 从矢量源重新导出
裁剪的边缘 艺术作品放置在界限太近 增加安全的填充
拉伸 全屏幕图片被迫适应多种分辨率 使用背景颜色加上居中的图片
不匹配的过渡 背景图片与首屏不同 启动和应用壳颜色保持一致

启动屏幕图片不应包含密集的文本、细节或营销文案。启动屏幕只被短暂浏览,且在严格的原生约束下渲染。

对于频繁发布视觉更新的团队,图片管理的重要性不仅仅在于启动屏幕。同样的习惯也适用于交付包和二进制大小,这就是为什么像 优化图片更新 的指南值得一读的原因。

实用的导出工作流

在实际项目中,一个有效的设置看起来像这样:

  1. 设计一个背景为纯色的中心组合 如果您的工作流支持单独的背景颜色,则导出一个透明的Logo PNG
  2. 导出一个背景为纯色的中心组合 如果您的工作流支持单独的背景颜色,则导出一个透明的Logo PNG
  3. 保持命名一致 以便在各个平台上进行资产交换时不必猜测。
  4. 尽早在小型和高型模拟器上进行测试 在编写启动屏幕生命周期之前
  5. 在资产发生变化后重建 因为启动资源通常存储在本机缓存中。

最后一点比人们想象的更重要。许多启动屏幕问题看起来像配置错误,但实际上只是本机资产过时。

使用 Expo Go 和开发客户端工作流程进行实现

如果您正在使用 Expo,请从 expo-splash-screen使用它,因为它适合管理工作流程,保持大部分配置声明式,并且可以让您明确控制启动屏幕何时离开。

截图来自 https://reactnative.dev/

理解的关键行为很简单。 保持原生启动屏幕直到第一个有意义的UI帧准备好。 Expo的 SplashScreen API 支持的确切模式是 preventAutoHideAsync() 在启动时和 hideAsync() 一旦关键加载完成后,Expo警告说隐藏太早会在iOS和Android构建中短暂地暴露一个空白屏幕,详见文档中的 Expo启动屏幕API.

配置原生启动屏幕

在Expo项目中,视觉部分通常存储在 app.jsonapp.config.js.

A typical app.json 在Capacitor live-update替代方案比较页面中,Capgo UI字符串的HTML文本片段(父级键`alternatives_cta_questions`)。页面/区域:Capacitor live-update替代方案比较页面。角色:长期营销或法律段落。见:页面alternatives.astro。保留Capgo产品/品牌和开发者术语的准确性。消息键`alternatives_cta_questions`(替代方案CTA问题)。| HTML文本片段来自更长的Capgo UI字符串(父级键`appflow_cta_questions`)。页面/区域:Appflow比较/迁移营销文本。角色:长期营销或法律段落。见:页面ionic-appflow.astro。保留Capgo产品/品牌和开发者术语的准确性。消息键`appflow_cta_questions`(Appflow CTA问题)。| HTML文本片段来自更长的Capgo UI字符串(父级键`capwesome_cta_questions`)。页面/区域:Capawesome比较页面。角色:长期营销或法律段落。见:页面capwesome.astro。保留Capgo产品/品牌和开发者术语的准确性。消息键`capwesome_cta_questions`(Capwesome CTA问题)。| HTML文本片段来自更长的Capgo UI字符串(父级键`consulting_faq_subtitle`)。页面/区域:咨询服务页面。角色:段落标题或标语。见:页面consulting.astro。保留Capgo产品/品牌和开发者术语的准确性。消息键`consulting_faq_subtitle`(咨询FAQ标题)。| Appflow比较/迁移营销文本。角色:短UI标签或导航项。见:页面ionic-appflow.astro,页面ionic-enterprise-plugins.astro,页面解决方案/ionic-enterprise-plugins.astro。消息键`appflow_plugins_or`(Appflow插件或)。

{
  "expo": {
    "plugins": [
      [
        "expo-splash-screen",
        {
          "backgroundColor": "#111111",
          "image": "./assets/splash-icon.png",
          "imageWidth": 200
        }
      ]
    ]
  }
}

典型的设置如下:

A few practical choices matter here:

  • 选择合适的背景颜色 选择与初始屏幕背景颜色接近的颜色
  • 保持背景颜色简单 保持背景颜色简洁
  • 避免伪造的“品牌延迟” 避免在logo上停留

根据应用程序的就绪状态隐藏启动屏幕

避免使用时间来隐藏启动屏幕 setTimeout许多教程经常会走弯路

它们使用

import { useCallback, useEffect, useState } from 'react';
import { View } from 'react-native';
import * as SplashScreen from 'expo-splash-screen';

SplashScreen.preventAutoHideAsync();

export default function App() {
  const [isReady, setIsReady] = useState(false);

  useEffect(() => {
    async function prepare() {
      try {
        // Load fonts
        // Restore auth state
        // Read persisted settings
      } finally {
        setIsReady(true);
      }
    }

    prepare();
  }, []);

  const onLayoutRootView = useCallback(async () => {
    if (isReady) {
      await SplashScreen.hideAsync();
    }
  }, [isReady]);

  if (!isReady) {
    return null;
  }

  return (
    <View style={{ flex: 1 }} onLayout={onLayoutRootView}>
      {/* Your real app UI */}
    </View>
  );
}

使用应用程序的启动状态代替。一个常见的根级模式如下:

首先, preventAutoHideAsync() 它在应用程序开始呈现有意义的UI之前被调用。其次,隐藏仅在根视图准备好布局后才发生,这有助于减少原生启动屏和React树之间的闪烁的机会。

不要在异步工作完成时隐藏启动屏。等待UI可以根据该工作呈现时再隐藏它。

在启动过程中,包括身份验证恢复、远程配置或字体加载在内的区别尤其重要。如果您的主屏幕依赖于自定义字体和已签名的状态,则启动屏应该填补这一差距。

以下是React Native更广泛的启动和启动生态系统的有用教程:

在Expo Go和开发构建中预期的内容

Expo添加了一个额外的复杂性。您在独立构建中期望的启动屏行为可能与在Expo Go中看到的不一致。

这导致了很多团队的困惑。您更改资产或时间逻辑,测试在Expo Go中,然后得出结论配置是有问题的,而实际问题是开发环境与生产二进制不一致。

使用以下思维模型:

  • Expo Go是便于迭代的 但它并不是原生启动屏行为的最终权威。
  • 开发客户端更接近现实 因为它们包含了生成的原生项目。
  • 独立构建是最终的检查项 用于检查启动时间、主题行为和资产正确性。

如果您的启动屏幕仍然闪烁或延迟,通常是因为隐藏太早、渲染时间太长或测试环境不反映发布行为。 null 配置裸露的React Native__CAPGO_KEEP_0__项目

Configuring for Bare React Native CLI Projects

在__CAPGO_KEEP_0__项目中,我通常建议

In CLI projects, I usually recommend react-native-bootsplash ,所以您在维护工作中会遇到它,但对于一个新的设置,目标仍然是相同的。显示一个原生启动表面,然后在应用程序可以渲染有意义的UI时才隐藏它。 react-native-splash-screen一个四步的图表,展示了在React Native__CAPGO_KEEP_0__中设置启动屏幕的过程。

A four-step infographic illustrating the process for setting up a splash screen in React Native CLI.

Android设置在裸露项目中

Android启动画面设置存在于几个地方:主题资源、绘图、 AndroidManifest.xmlMainActivity. 这种分裂是为什么小错误会导致可见的闪烁。

通常的流程是直接的:

  1. 为Android资源文件夹生成启动画面资产。
  2. 定义一个启动主题,正确的背景颜色和启动绘图。
  3. 将该主题应用到启动器活动中 AndroidManifest.xml.
  4. 初始化启动画面在 MainActivity.
  5. 隐藏它在JavaScript中,启动任务完成后,阻塞首次渲染。

简化 MainActivity.kt 模式通常如下:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // initialize splash handling here depending on the library
}

该片段故意通用,因为具体的调用取决于库。 native集成点通常是容易的部分。 错误往往来自资源和主题转换。

Android生产环境中出现的问题如下:

  • 主题不匹配: 如果启动主题的背景颜色与第一个应用屏幕的背景颜色不同,用户会在切换时看到闪烁的效果。
  • 资产存储桶不正确: Android会将缺少的预期密度文件夹中的资产拉伸或模糊。
  • 仅使用Metro进行测试: 本机资源更改通常需要进行清洁重建。热重载不会验证启动行为。
  • Android 12启动规则: 新版Android版本会先应用自己的启动行为,因此自定义设置需要遵守这些平台约束。
  • 隐藏JS慢: 如果React在根视图可以绘制之前隐藏了启动屏幕,用户会看到一个空白框架而不是smooth过渡。

最后一点比图像本身更重要。时间问题通常被认为是性能问题。

iOS项目的设置

在iOS中,中心是 LaunchScreen.storyboard 加上一个小的本机钩子在 AppDelegate.该平台预期启动屏幕是静态的和轻量级的。将其视为第一个屏幕的视觉结构的快照,而不是一个小型引导流程。

可靠的设置如下:

  • 将资源添加到Xcode资产目录。
  • 配置 LaunchScreen.storyboard 使用简单的约束。
  • 保持布局静态。背景颜色、Logo和安全间距通常足够。
  • AppDelegate.
  • 仅在应用程序完全准备好渲染后,从JavaScript中隐藏启动屏幕。

新加入iOS的团队经常会对故事板进行过度构建。通常会出现问题。复杂的约束、多个嵌套视图或尝试动画启动屏幕使设置变得难以维护并且更容易在不同设备大小上打破。

A plain launch screen is the safer choice.

裸 CLI 给你对启动流程的更多控制权

这是 Expo-managed 和裸 CLI 之间的关键区别。 Expo 提供了更快的路径来获得正确的默认值。裸 CLI 给你对原生启动管道的完全责任。

这种权衡在启动时进行的更多工作时变得有用。需要额外控制的应用通常包括认证恢复、加密存储读取、自定义原生 SDK 初始化或白标品牌规则。裸项目让你可以将启动时间与这些工作对齐,而不是将它们强制通过更高级别的配置。

如果你计划在启动后添加动画过渡,保持原生启动屏幕静态,移动动画到第一个 React 屏幕。性能权衡与任何移动启动路径中的问题类似。首次绘制期间进行大量工作是昂贵的。这 关于 Capacitor 应用动画性能的指南 这篇指南从另一个栈中介绍了相同的原则,这个教训可以清晰地应用到 React Native 中。

Expo-managed 和裸 CLI 的比较

实践比较更关注启动复杂性所在的位置,而不是图像显示。

决策点 Expo-managed 裸 CLI
快速设置 更快的初始设置 更多本地工作
本地定制 更受限制 完全控制
资产生成流程 更声明式 更多手动
调试表面 JS 配置加上生成的本机层 直接 Android 和 iOS 文件
最佳匹配 优化速度和一致性的团队 需要深度原生控制的团队

如果应用程序已经在Expo中,如果启动要求是标准的,通常会节省时间。如果启动路径依赖于原生初始化顺序、自定义主题或平台特定引导逻辑,裸CLI通常是更长期的清洁选择。

两种工作流程都可以发布一个精致的启动屏幕。区别在于谁拥有启动管道,框架还是团队。

动画启动屏幕看起来精致时,它尊重启动管道。它看起来便宜时,它会分散注意力。

所以我把动画当作增强层,而不是基础。第一项任务仍然是时间。如果应用程序还没有准备好,启动屏幕就不会消失。如果应用程序已经准备好,过渡应该迅速进入第一个可用的屏幕。

动画应该遵循启动现实

一个常见的模式是保持原生启动屏幕简单,然后在应用程序启动后在第一个React屏幕上运行一个轻量级的品牌动画。这给了你比试图在真实的原生启动表面上动画的更多灵活性。

Lottie是这种手上的一个实用选择,因为它可以在第一个屏幕上交付动画,而不需要构建一个重型的自定义动画堆栈。重要的是顺序:

原生启动屏幕在关键启动工作期间保持可见性。

  • 动画启动屏幕看起来精致时,它尊重启动管道。它看起来便宜时,它会分散注意力。
  • React 将首屏或控制过渡屏幕进行渲染。
  • 只有当它不阻塞交互时,才会播放可选动画。

什么不起作用的是旧的 setTimeout(2000) 模式。 在快速设备上,这会让应用程序等待毫无理由。在慢速设备上,它通常只是将一个加载状态替换为另一个。

将启动视为编排

更好的思维模型是 启动编排。 首屏应该覆盖必须完成的任务才能显示有意义的内容。

这通常包括一些混合的内容:

  • 认证引导: 恢复会话或决定是否路由到登录。
  • 必需的存储读取: 主题、区域设置、引导状态和最后已知的关键偏好。
  • 字体可用性: 尤其是,如果第一个屏幕依赖自定义字体来实现布局稳定性。
  • 远程配置,控制 UI: 只有在第一个屏幕无法安全地渲染而不依赖它时才会使用。

还有另一个细微差别,很多教程都忽略了这一点。启动屏幕的行为会根据环境而变化。关于Expo启动屏幕在开发和生产环境下的处理 指出,在Expo Go中启动屏幕的行为可能与在独立构建中表现出的不一样,而且一旦你自己控制了可见性,自动可见性管理就会改变。这就是为什么延迟示例会过时的原因。它们隐藏了实际的启动序列,而不是与它保持一致。 启动屏幕不应该用来欺骗用户。它应该用来防止用户看到未完成的 UI。

如果你在混合堆栈中添加动画或评估更广泛的渲染性能

这个关于__CAPGO_KEEP_0__应用动画性能的指南 this guide to animation performance in Capacitor apps 主题、区域设置、引导状态和最后已知的关键偏好。

对于团队来说,外部发布可视修复的实践注意事项: Capgo 处理JavaScript、CSS、复制、配置和资产更新的Capacitor和Electron应用,但React Native中的原生启动屏幕问题仍然属于原生构建管道,因为真正的启动屏幕在JavaScript应用启动之前就已经出现了。

解决常见的启动屏幕问题

大多数启动屏幕问题都归结为几个重复犯错的问题。 资产问题, 时间问题, 原生集成问题.

社区模式在最近的React Native指南中趋同于相同的核心流程:添加库、配置原生启动资产、在启动时调用 show 并在应用准备好时隐藏。Android设置通常涉及 MainActivity 和XML或drawable资源,而iOS则集中在 LaunchScreen.storyboardAppDelegate。同样的概述指出Expo推荐一个正方形的1024×1024 PNG 用于应用程序图标 1024×1024 PNG npx create-expo-app为EAS Build创建的项目 ,如本React Native启动屏幕指南.

拉伸或模糊的启动屏幕

症状: Logo看起来模糊、裁剪或奇怪地缩放。

原因: 基准图像没有正确导出,或者布局依赖于一个全屏的栅格图像,它不太适应。

解决方案: 将 poster 样式的艺术作品替换为一个居中的 logo 在平面背景上。从原始设计源重新导出,重新生成密度特定的资产,并验证您的 Android 可绘制文件或 iOS 资产目录包含所需的文件。

隐藏 splash 后的白屏

症状: 原因为:

解决方案: 在某个平台上缺失的 splash 屏幕

症状: 原因为:

解决方案:

Tie splash 消失与就绪相关,而不是时间。 在 Expo 中,这通常意味着在根视图可以布局之前保持 splash。 在裸项目中,使用等效模式并确保第一个渲染的屏幕不会立即阻塞更多的异步工作。 在某个平台上缺失的 splash 屏幕

症状:Android 显示它,iOS 不显示,或者反之亦然。 一个本地侧边没有完全配置。经常是忘记了 storyboard 引用、主题连接问题或未添加到正确目标的资产。

修复: 检查每个平台的文件。对于 Android,检查启动主题和资源引用。对于 iOS,确认 LaunchScreen.storyboard,资产目录成员资格以及 Xcode 中的应用目标设置。

添加启动屏幕配置后,构建会中断。

症状: 在引入库或更改启动屏幕文件后,应用停止编译。

原因: 本机项目文件和生成的配置可能会脱离同步,尤其是在插件或资产更改后。

修复: 清理构建,重新安装依赖项如果需要,然后重新构建本机项目。 如果您在 Expo 中使用生成的本机层,仔细重新生成并验证插件配置。如果您在一个裸应用中,请审查 MainActivity, AppDelegate,资源名称以及任何 plist 或清单编辑的小差异。

最快的团队将启动屏幕视为发布工程的一部分,而不是一次性的视觉任务。即使启动资产、UI 文本或应用外壳行为需要快速更改,也更重要。 Capgo gives Capacitor and Electron teams a way to ship JavaScript, CSS, copy, config, and asset fixes on the next launch with rollout controls and rollback support, which is useful when the problem is in the app layer rather than the native launch screen itself.

从 React Native 中的启动屏幕:2026 年完整指南

如果您正在使用 启动屏幕:2026 年完整指南 来规划本机媒体和界面行为,连接它与 使用 @capgo/capacitor-live-activities 为本机能力在使用 @capgo/capacitor-live-activities @capgo/capacitor-live-activities 为实现细节在 @capgo/capacitor-live-activities 使用 @capgo/capacitor-video-player 为使用@capgo/capacitor-video-player的原生功能 @capgo/capacitor-video-player 为@capgo/capacitor-video-player的实现细节 使用@capgo/capacitor-native-navigation 为使用@capgo/capacitor-native-navigation的原生功能

Capacitor 应用的即时更新

当一个 web层 bug 活跃时,通过 Capgo 发布修复,而不是等待几天的应用商店审批。用户在后台接收更新,而原生更改仍在正常审查路径中。

来自马丁的专业支持

立即开始

最新博客

Capgo 给您创建真正专业移动应用所需的最佳见解。