APP启动流程介绍与启动优化建议

APP启动分为两类,冷启动,热启动

1.冷启动是指, App 点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动的情况。这是一次完整的启动过程。

2.热启动是指 ,App 在冷启动后用户将 App 退后台,在 App 的进程还在系统里的情况下,用户重新启动进入 App 的过程,这个过程做的事情非常少。

这里我们主要讲解冷启动的过程:

启动的时间段我这里分为三个阶段

1.main()函数执行前

1) 加载编译各类库;

2)加载可执行文件(App 的.o 文件的集合);

3)加载动态链接库,进行 rebase 指针调整和 bind 符号绑定;

4)Objc 运行时的初始处理,包括 Objc 相关类的注册、category 注册、selector 唯一性检查等;

5)初始化,包括了执行 +load() 方法、attribute((constructor)) 修饰的函数的调用、创建 C++ 静态全局变量等。

优化建议:减少动态库的加载;减少加载后不会用的类与方法;+load() 方法里的内容可以放到首屏渲染完成后再执行;减少c++全局变量的数量;

2.main()函数执行后

main() 函数执行后的阶段,指的是从 main() 函数执行开始,到 appDelegate 的 didFinishLaunchingWithOptions 方法里首屏渲染相关方法执行完成。过程包括:

1)首屏初始化的配置文件的读取操作

2)首屏列表大量数据的读取

3)首屏渲染的大量计算

优化建议:功能上梳理出首页离屏渲染必须要执行的初始化方法,把非必要在首页离屏渲染初始化的方法放在首页离屏渲染后初始化;

3.首页离屏渲染完成后

简单说的话,这个阶段就是从渲染完成时开始,到 didFinishLaunchingWithOptions 方法作用域结束时结束。这个阶段其实用户已经能够看到首屏的东西了。(这块如果没有出现会卡住主线程的方法,启动优化可以排在最后)

主要完成的是,非首屏其他业务服务模块的初始化、监听的注册、配置文件的读取等。

你可能感兴趣的:(APP启动流程介绍与启动优化建议)