Android 应用启动完整流程分析
基于 Android 14.0.9 AOSP 源代码的深度分析,我为您详细讲解应用启动的每个阶段:
🎯 第一阶段:用户点击应用图标
流程:
用户点击应用图标 → Launcher应用 → startActivity(Intent)
→ IActivityManager.startActivity() [跨进程调用]
涉及代码:
Activity.startActivity()- 发起启动请求IActivityManager.aidl- 定义了跨进程通信接口
🎯 第二阶段:ActivityManagerService 决策
类: ActivityManagerService.java (902.3KB)
关键方法:
startActivity(Intent)- 接收启动请求startActivityAsUser()- 处理用户相关逻辑resolveIntent()- 解析Intent,确定目标ActivitystartActivityLocked()- 加锁处理,更新Activity栈
处理内容:
- ✅ 验证权限
- ✅ 解析Intent (获取目标Activity、Package等)
- ✅ 检查是否需要启动新进程
- ✅ 管理Activity栈
plaintext
Intent → 权限检查 → Intent解析 → PackageManager查询
→ 确定目标Activity → 检查进程状态
🎯 第三阶段:进程启动(关键)
类: ProcessList.java (256.7KB)
启动条件检查:
java
// 检查应用进程是否已存在
if (应用进程已存在) {
// 直接启动Activity(跳到第四阶段)
} else {
// 启动新进程
Process.start(zygote, 进程名, uid, gid, ...)
}
进程启动流程:
- Zygote 预启动进程
- Zygote 是一个预加载了系统库和资源的进程池
- 存储位置:
art/runtime/
- Fork 新进程
- 通过
Process.start()调用 - 本质是 fork() 系统调用 + execv() 执行新程序
- 通过
- 进程初始化
plaintext
新进程启动 → RuntimeInit.main() → ActivityThread.mai



被折叠的 条评论
为什么被折叠?



