Activity启动流程

原创 2018年04月17日 18:48:59

Activity启动流程

参与组件:

  • Instrumentation: 监控应用与系统相关的行为
  • AMS:组件管理调度中心,什么都不敢但什么都管
  • ActivityStarter: Activity启动的控制器,处理Intent和flag对Activity启动的影响,具体来说有:1. 寻找符合启动条件的Activity,如果有多个,让用户选择 2.校验启动参数的合法性, 3.返回int参数,代表Activity是否启动成功.
  • ActivityStackSupervisior:用来管理任务栈
  • ActivityStack:用来管理任务栈里面的Activity
  • ActivityThread:最终干活的人,事ActivityThread的内部类,Activity,Service,BroadCastReceiver的启动,切换,调度等操作都是在这个类里面完成

ActivityStackSupervisior,这是高版本才有的类,用来管理多个ActivityStack,

整个流程主要涉及四个进程

  1. 如果实在桌面启动应用就是launcher应用进程
  2. ActivityManagerService所在的System Service进程,该进程主要运行着系统服务组件
  3. Zygote进程,该进程主要用来fork新进程
  4. 新启动的应用程序,该进程就是用来承载应用运行的进程,也是应用的主线程,处理组件的生命周期,页面绘制等相关事情

总结:

  1. 点击桌面上的图标launcher进程将启动Activity的请求以binder的形式发送给AMS
  2. AMS收到请求后,交付给ActivityStarter处理Intent和flag信息,然后再交给ActivityStackSuperVisior处理Activity进栈相关流程,同事以Socket方式请求Zygote进程来fork新进程
  3. Zygote收到请求后,fork出新进程
  4. 在新进程里创建ActivityThread对象,新进程就是应用的主线程,在主线程里开启Looper消息循环,开始处理创建Activity
  5. ActivityThread利用classLoader去加载Activity,创建Activity实例,并回调Activity的onCreat()方法,这样便完成了Activity的启动
收藏助手
不良信息举报
您举报文章:Activity启动流程
举报原因:
原因补充:

(最多只允许输入30个字)