Activity 的启动流程

程序员 2024-9-18 12:24:27 43 0 来自 中国
参考 : https://juejin.cn/post/6844903897748733966
流程如下 :

  • Activity 对象的 startActivity(intent) 方法
  • Activity 对象的 startActivityForResult(intent) 方法
  • 调用 mInstrumentation.execStartActivity()
  • 调用 ActivityManager.getService().startActivity() 方法, 此中 ActivityManager.getService() 返回的是 ActivityManagerService (AMS) 在应用历程的当地署理。
  • 调用 AMS 的 startActivity() 方法
  • 调用 ActivityStarter 的 startActivity() 方法
  • 调用 ApplicationThread 的 scheduleLaunchActivity() 方法, 该方法中发送一个 H.LAUNCH_ACTIVITY 消息
  • ActivityThread 的 Handler 的 handleMessage() 方法处理惩罚 H.LAUNCH_ACTIVITY 消息, 调用 handleLaunchActivity() 方法

    • 调用 ActivityThread 的 performLaunchActivity() 方法

      • 创建 Activity 实例
      • 实行 onCreate() 和 onStart() 生命周期

    • 调用 ActivityThread 的 handleResumeActivity() 方法 ()

      • 实行 onResume() 生命周期
      • 为 WindowManager 添加 DecorView


  • ActivityThread 的 handleResumeActivity() 方法终极会调用 ViewRootImpl 的requestLayout() 方法
  • 调用 ViewRootImpl 的 scheduleTraversals() 方法
  • 调用 ViewRootImpl 的 performTraversals() 方法
  • 调用 ViewRootImpl 的 performMeasure(),performLayout(), performDraw() 方法
简化版 :

  • Activity 对象的 startActivity(intent) 方法
  • 调用 ActivityManagerService (AMS) 的 startActivity() 方法
  • ActivityThread 的 handleResumeActivity() 方法
  • ViewRootImpl 的 requestLayout() 方法
  • ViewRootImpl 的 performTraversals() 方法
  • ViewRootImpl 的 performMeasure(),performLayout(), performDraw()
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-25 02:42, Processed in 0.163759 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表