APP 启动过程详解
1. 启动分类
- 冷启动:进程不存在,需创建新进程。最完整、最慢。
- 温启动:进程存在,但 Activity 已销毁或被回收。
- 热启动:进程和 Activity 均存在,仅需从后台切回前台。
2. 冷启动全流程 (Android 10+ 逻辑)
第一阶段:点击图标 (IPC 1)
- 用户点击 Launcher 图标。
- Launcher 进程通过 Binder 向 SystemServer 进程的 AMS 发送
startActivity请求。
第二阶段:进程创建 (Socket 通信)
第三阶段:App 进程初始化
- 新进程启动后,进入
RuntimeInit,最终调用 ActivityThread 的main()方法。 - ActivityThread.main():
第四阶段:绑定 Application (IPC 2)
- AMS 通过 Binder 回调 App 进程的
bindApplication。 - App 进程发送
BIND_APPLICATION消息给H。 H处理消息:- 创建
LoadedApk对象。 - 创建
ContextImpl。 - 反射创建
Application实例。 - 调用
Application.onCreate()。
- 创建
第五阶段:启动 Activity (IPC 3)
- AMS 发送
EXECUTE_TRANSACTION指令。 - App 进程通过
ClientTransactionHandler执行事务。 - 依次触发:
3. 渲染与显示
- onResume 执行完后,ActivityThread 调用
wm.addView()。 - 创建 ViewRootImpl。
- ViewRootImpl 触发
requestLayout(),等待 Vsync 信号进行 measure、layout、draw。 - 最终通过 SurfaceFlinger 将画面呈现在屏幕上。