Android Activity启动流程全解析(从点击图标开始)

一、Launcher点击阶段

  1. 用户点击应用图标

    • Launcher进程通过Binder IPC调用ActivityManagerService(AMS)的startActivity()

    • 携带Intent信息(包含目标Activity组件名)

  2. AMS初步处理

    • 检查目标Activity的权限和合法性

    • 创建ActivityRecord记录此次启动

    • 暂停当前Activity(Launcher的onPause()被调用)

二、系统准备阶段

  1. 进程检查

    • AMS检查目标应用进程是否存在

    • 若不存在则通过Zygote fork新进程

    • 新进程入口:ActivityThread.main()

  2. 应用进程初始化

    • 创建主线程Looper

    • 实例化ActivityThread

    • 绑定Application(创建并调用Application.onCreate())

三、Activity实例化阶段

  1. 创建Activity上下文

    • AMS通过Binder通知目标进程创建Activity

    • ActivityThread.handleLaunchActivity()被调用

    • 执行关键操作:

      // 1. 创建Activity实例
      Activity activity = mInstrumentation.newActivity();
      
      // 2. 创建Application(若未创建)
      Application app = makeApplication();
      
      // 3. 关联Context
      activity.attach();
  2. 窗口初始化

    • 创建PhoneWindow对象

    • 设置WindowManager回调

    • 建立与SurfaceFlinger的连接

四、生命周期回调阶段

  1. 完整生命周期调用

    • 依次触发:

      activity.onCreate();
      activity.onStart();
      activity.onResume();
    • 特别注意:

      • onCreate()中setContentView()触发View层级构建

      • onResume()后界面才真正可见可交互

  2. 视图绘制流程

    • ViewRootImpl.performTraversals()被调用

    • 触发measure/layout/draw三阶段

    • 最终通过SurfaceFlinger合成渲染

五、窗口显示阶段

  1. WMS处理

    • WindowManagerService分配窗口层级

    • 计算窗口位置和尺寸

    • 通知SurfaceFlinger准备缓冲区

  2. 动画处理

    • 执行启动过渡动画(若有)

    • 动画结束后Launcher界面完全隐藏

      六、核心系统组件协作

      组件职责
      ActivityManagerService全局Activity调度
      ActivityThread应用进程主线程管理
      WindowManagerService窗口管理
      SurfaceFlinger图层合成与渲染
      Binder跨进程通信

      七、启动优

      化关键点

    • 应用启动分类

      • 冷启动:进程不存在(最耗时)

      • 温启动:进程存在但Activity销毁

      • 热启动:Activity在栈中(最快)

    • 优化方向

      • 减少Application初始化工作

      • 延迟非必要组件加载

      • 使用启动主题防止白屏

      • 避免主线程IO操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值