App Launch 是XCode 11 以后提供的检测工具, 主要是用来查看App启动过程,然后针对耗时操作进行优化,进而对启动速度进行优化。
使用
-
打开Instruments - App Launch
-
选择App,然后点击录制,结束录制后会有一个分析展示
xcode13系统默认录制20s,可以长按
录制
按钮选择Recording Options更改录制时间
- 选中 App,右侧会将启动过程划分为几个阶段,并分别显示各阶段的耗时情况。(ps:右侧可以通过
CMD + +
细化时间进行查看)
注:下面是各个阶段的介绍
进程创建
(Initializing) - 紫色系统初始化
(Initializing - System Interface Initialization)- 紫色静态运行时的初始化
(Initializing - Static Runtime Initialization)UIKit初始化
(Launching - UIKit Initialization)- 浅绿色启动
(Launching - didFinishLaunchingWithOptions())- 深绿色第一帧渲染
(Launching - Initial Frame Rendering)- 浅绿色前台运行
(Forground - Active)
-
下方显示了整个过程的详细信息,可以切换不同的角度查看
Event:Context Switch Point
(查看整个启动过程中上下文切换的位置)
Profile
(显示整个启动过程中的方法调用栈及方法耗时)
App Life Cycle
(启动过程中的各个阶段的耗时 - 生命周期)
Sample
(各个Cpu显示线程信息 状态 回溯)
-
一般来说,系统初始化阶段和UIKit初始化阶段优化空间较小,毕竟是系统的相关方法。所以我们重点关注在启动和第一帧渲染的阶段。可以通过三击某个阶段,来查看某个阶段的信息,例如,三击launching阶段,选择下方的profile,就可以只查看 Launching 阶段所有方法的调用和耗时情况了。然后找出耗时较长的方法进行相应优化即可。
-
除此之外,还可以查看在启动过程中的所有线程情况,选中App,然后点击左侧箭头,会展开显示启动过程中App的所有线程,点击线程的展开符号可以选择显示线程的状态。
注:线程的状态会通过右侧颜色进行标注
- 灰色(Blocked):当前线程被阻塞
- 红色(Runnable):当前线程可以运行,即有了CPU资源就可以立即运行
- 橙色(Preempted、Interrupted):线程被中断,CPU去执行其他优先级更高的线程
- 蓝色(Running):线程正在执行
参考文章
# Optimizing App Launch
# Instruments App Launch 启动时间查看
# 使用Instruments - App Launch查看启动问题