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 方法作用域结束时结束。这个阶段其实用户已经能够看到首屏的东西了。(这块如果没有出现会卡住主线程的方法,启动优化可以排在最后)

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容