深入解析:Android App 冷启动全流程(从点击图标到界面显示)
前言
理解 Android 应用的启动流程,特别是冷启动(Cold Start),对于开发者进行性能优化、定位启动慢问题以及应对技术面试都至关重要。它涉及用户交互、多个系统服务、进程创建与通信、应用内部初始化以及复杂的 UI 绘制等一系列环节。
本文将详细剖析冷启动的全过程,深入到关键组件和交互细节,帮助你构建一个清晰完整的启动链路认知。
通过本文,你将详细了解:
- 用户点击图标后,事件是如何传递到系统服务的。
AMS/ATMS
如何调度应用启动。Zygote
如何高效地创建应用进程(fork
与COW
)。- 应用进程如何初始化 (
Application
的创建与回调)。 Activity
如何被创建、加载布局并执行生命周期方法。- 界面是如何最终绘制并显示到屏幕上的(涉及
View
绘制、WMS
和SurfaceFlinger
)。
阶段一:事件触发与系统准备 (Launcher & System Server)
用户交互 (Input System & Launcher):
- 用户触摸屏幕点击 App 图标。
- 事件经由 Linux 内核 Input Driver -> Android
InputReader
->InputDispatcher
传递。 InputDispatcher
将事件分发给当前聚焦的 Launcher 应用。
Intent 解析与启动请求 (Launcher):
- Launcher 确定用户点击的 App 图标,构建包含目标
ComponentName
(包名 + 主 Activity 类名)和标准 Action/Category (ACTION_MAIN
,CATEGORY_LAUNCHER
) 的Intent
。 - Launcher 通过 Binder IPC 调用系统服务接口(如
ActivityTaskManager.getService().startActivity(...)
)将启动请求发送给system_server
进程中的 ActivityTaskManagerService (ATMS) 或旧版中的 ActivityManagerService (AMS)。
- Launcher 确定用户点击的 App 图标,构建包含目标
阶段二:系统调度与进程创建 (System Server: ATMS/AMS & Zygote)
请求处理与权限检查 (ATMS/AMS):