请简述从点击图标开始App的启动流程

更多面试题请看这里:https://interview.raoyunsoft.com/

当用户点击应用图标时,整个启动过程涉及多个系统进程协作,主要流程如下:

  1. Launcher发起请求
    用户点击图标后,Launcher进程(系统桌面)通过Binder IPC向SystemServer进程的ActivityManagerService(AMS)发起startActivity请求,携带目标Activity信息。

  2. SystemServer请求创建进程
    SystemServer进程收到请求后,确认目标应用进程尚未存在,通过socket通信向Zygote进程发送创建新进程的指令。

  3. Zygote孵化应用进程
    Zygote进程通过fork()系统调用创建新的应用进程,并初始化ART虚拟机环境,加载目标应用的Application类。

  4. 应用进程绑定SystemServer
    新创建的应用进程通过Binder IPC向SystemServer进程发起attachApplication请求,将进程信息注册到AMS,并初始化ApplicationThread(用于跨进程通信)。

  5. 调度启动目标Activity
    SystemServer进程(AMS)收到绑定请求后,通过Binder IPC向应用进程发送scheduleLaunchActivity指令,要求启动目标Activity。

  6. 主线程准备启动
    应用进程的ApplicationThread收到指令后,通过Handler向主线程(UI线程)发送LAUNCH_ACTIVITY消息。

  7. 创建Activity执行生命周期
    主线程处理消息时完成核心操作:

    • 通过反射实例化目标Activity
    • 调用Activity.onCreate()初始化界面
    • 依次执行onStart()onResume()
    • 完成DecorView的绘制与显示

最终用户即可看到应用界面。整个过程通常在200ms-500ms内完成(冷启动场景)。

关键优化点

  • 步骤7之前会先执行ApplicationonCreate()
  • 过度复杂的初始化会导致启动白屏
  • 多进程应用会重复步骤3-4
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值