Flutter应用闪屏阶段运行逻辑及main.ts执行时机咨询
问题解答
1. Flutter 应用闪屏阶段的执行操作
针对iOS平台,闪屏从展示到消失的阶段会执行以下操作:
- 系统进程拉起应用,优先加载
Info.plist中配置的原生闪屏资源(LaunchScreen.storyboard或静态LaunchImage)并展示给用户 - 原生层同步初始化
FlutterEngine:加载Flutter内核二进制、Skia渲染引擎、Dart虚拟机实例 - 引擎初始化完成后,读取App的资源清单,预加载内置的静态资源、字体文件等
- 启动Dart运行时,开始执行Dart侧的入口代码
- 保持闪屏展示,直到Dart侧调用
runApp完成第一帧渲染,才会自动隐藏原生闪屏 - 若你自己实现了自定义Dart侧闪屏逻辑,这部分代码的执行也会被计入闪屏阶段的总耗时
2. 入口文件的执行时机
你提到的main.ts属于笔误,Flutter的Dart侧入口文件为main.dart,它的执行时机是闪屏展示期间,完整的启动时序如下:
- 应用被系统拉起,立即展示原生闪屏
- 原生层Flutter引擎初始化完成后,立刻触发执行
main.dart中的main函数 - 从
main函数启动,到执行runApp(xxx)完成第一帧渲染的整个过程,原生闪屏都会持续展示 - Flutter首帧渲染完成后,系统自动隐藏原生闪屏,进入应用正式页面
闪屏卡顿问题排查参考
你本地无法复现、Sentry无报错是因为该问题属于启动性能问题而非崩溃,苹果审核通常使用低配、存储空间占用率高的旧款设备测试,和本地高配测试环境差异很大,可按以下方向排查:
- 拿旧款iOS设备(如iPhone 8、iPhone SE2)在存储占满、后台多进程运行的场景下多次冷启动测试,复现卡顿问题
- 检查
main函数到runApp之间是否有同步执行的重耗时操作:比如大量数据库初始化、同步文件读写、同步网络请求等,这些操作会阻塞Dart线程,导致首帧迟迟无法渲染,被系统判定为闪屏卡顿 - 用Xcode自带的Instruments工具的Time Profiler模块抓冷启动阶段的耗时分布,定位阻塞点
- 检查是否使用了第三方闪屏插件,部分插件会增加首帧渲染前的等待逻辑,超时就会被系统判定为异常
内容的提问来源于stack exchange,提问作者Yoann Picquenot
相关产品推荐
相关产品推荐

