App启动优化(一)启动原理

背景

随着App的快速发展,在功能、内容丰富的同时不可避免的会引入很多第三方工具库,例如友盟、支付组件、视频组件、IM即时通讯组件等,导致App首次启动的时候,时间较长,用户体验差,用户流失甚至弃用。

系统启动简述

1.打开电源 引导芯片代码加载引导程序Boot Loader到RAM中去执行
2.Boot Loader把操作系统拉起来
3.Linux内核启动开始系统设置,找到一个init.rc文件启动初始化进程
4.init进程初始化和启动属性服务,之后开启Zygote进程
5.Zygote开始创建JVM并注册JNI方法,开启SystemServer
6.启动Binder线程池和SystemServiceManager,并启动各种服务
7.AMS启动Launcher

image.png

App启动方式

App启动方式主要分为三种,冷启动、热启动、温启动

1.1:冷启动

冷启动:app没有启动或者进程被杀死后,系统不存在该app进程。
冷启动流程指app启动全过程,包括创建app进程、加载资源、启动Main Thread、初始化SplashActivtiy等

1.2:热启动

热启动:app处于后台状态未被杀死,系统只是把app从后台带到前台,展示给用户

1.3:温启动

介于二者之间,一般有两种情况:
1.用户点击back键退出,又重新启动;
2.用户退出app后,在onCreat()中恢复之前用onSaveInstanceState()中保存的状态;

App启动流程简述

以冷启动为例
1.当用户点击app Icon,Launcher进程采用Binder IPC方式向system_server发出startActivity请求
2.system_server接收到请求后,向zygote进程发起创建App进程的请求
3.Zygote进程孵化出新的子进程,即App进程
4.App进程通过Binder IPC方式向system_server发出attachApplication请求
5.system_server接收到请求后,做一系列准备工作,通过Binder IPC向App进程发送scheduleLaunchActivity的请求
6.App进程的binder线程(ActivityThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息
7.主线程在收到message后,通过反射的方式创建相关的Activity,并调用Activity的onCreat等方法
8.至此,app便正式启动,正式进入Activity的生命周期,执行完渲染完便可以看见App的主界面。

image.png

你可能感兴趣的:(App启动优化(一)启动原理)