面试复习题--APP应用启动流程

Android 应用启动完整流程分析

基于 Android 14.0.9 AOSP 源代码的深度分析,我为您详细讲解应用启动的每个阶段:


🎯 第一阶段:用户点击应用图标

流程:

用户点击应用图标 → Launcher应用 → startActivity(Intent) 
  → IActivityManager.startActivity() [跨进程调用]

涉及代码:

  • Activity.startActivity() - 发起启动请求
  • IActivityManager.aidl - 定义了跨进程通信接口

🎯 第二阶段:ActivityManagerService 决策

类: ActivityManagerService.java (902.3KB)

关键方法:

  1. startActivity(Intent) - 接收启动请求
  2. startActivityAsUser() - 处理用户相关逻辑
  3. resolveIntent() - 解析Intent,确定目标Activity
  4. startActivityLocked() - 加锁处理,更新Activity栈

处理内容:

  • ✅ 验证权限
  • ✅ 解析Intent (获取目标Activity、Package等)
  • ✅ 检查是否需要启动新进程
  • ✅ 管理Activity栈
 

plaintext

Intent → 权限检查 → Intent解析 → PackageManager查询
       → 确定目标Activity → 检查进程状态

🎯 第三阶段:进程启动(关键)

类: ProcessList.java (256.7KB)

启动条件检查:

 

java

// 检查应用进程是否已存在
if (应用进程已存在) {
    // 直接启动Activity(跳到第四阶段)
} else {
    // 启动新进程
    Process.start(zygote, 进程名, uid, gid, ...)
}

进程启动流程:

  1. Zygote 预启动进程
    • Zygote 是一个预加载了系统库和资源的进程池
    • 存储位置:art/runtime/
  2. Fork 新进程
    • 通过 Process.start() 调用
    • 本质是 fork() 系统调用 + execv() 执行新程序
  3. 进程初始化
     

    plaintext

    新进程启动 → RuntimeInit.main() 
            → ActivityThread.mai
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值