一、Launcher点击阶段
-
用户点击应用图标
-
Launcher进程通过Binder IPC调用ActivityManagerService(AMS)的startActivity()
-
携带Intent信息(包含目标Activity组件名)
-
-
AMS初步处理
-
检查目标Activity的权限和合法性
-
创建ActivityRecord记录此次启动
-
暂停当前Activity(Launcher的onPause()被调用)
-
二、系统准备阶段
-
进程检查
-
AMS检查目标应用进程是否存在
-
若不存在则通过Zygote fork新进程
-
新进程入口:ActivityThread.main()
-
-
应用进程初始化
-
创建主线程Looper
-
实例化ActivityThread
-
绑定Application(创建并调用Application.onCreate())
-
三、Activity实例化阶段
-
创建Activity上下文
-
AMS通过Binder通知目标进程创建Activity
-
ActivityThread.handleLaunchActivity()被调用
-
执行关键操作:
// 1. 创建Activity实例 Activity activity = mInstrumentation.newActivity(); // 2. 创建Application(若未创建) Application app = makeApplication(); // 3. 关联Context activity.attach();
-
-
窗口初始化
-
创建PhoneWindow对象
-
设置WindowManager回调
-
建立与SurfaceFlinger的连接
-
四、生命周期回调阶段
-
完整生命周期调用
-
依次触发:
activity.onCreate(); activity.onStart(); activity.onResume();
-
特别注意:
-
onCreate()中setContentView()触发View层级构建
-
onResume()后界面才真正可见可交互
-
-
-
视图绘制流程
-
ViewRootImpl.performTraversals()被调用
-
触发measure/layout/draw三阶段
-
最终通过SurfaceFlinger合成渲染
-
五、窗口显示阶段
-
WMS处理
-
WindowManagerService分配窗口层级
-
计算窗口位置和尺寸
-
通知SurfaceFlinger准备缓冲区
-
-
动画处理
-
执行启动过渡动画(若有)
-
动画结束后Launcher界面完全隐藏
六、核心系统组件协作
组件 职责 ActivityManagerService 全局Activity调度 ActivityThread 应用进程主线程管理 WindowManagerService 窗口管理 SurfaceFlinger 图层合成与渲染 Binder 跨进程通信 七、启动优
化关键点
-
应用启动分类
-
冷启动:进程不存在(最耗时)
-
温启动:进程存在但Activity销毁
-
热启动:Activity在栈中(最快)
-
-
优化方向
-
减少Application初始化工作
-
延迟非必要组件加载
-
使用启动主题防止白屏
-
避免主线程IO操作
-
-