【白话】App从启动到页面显示出来发生了什么

  1. 点击App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求
  2. system_server收到请求后,向Zygote进程发送创建进程的请求
  3. Zygote进程fork出新的子进程,即App进程
  4. App进程创建出来后,通过Binder IPC向system_server发起attachApplication请求
  5. system_server收到请求后,进行一系列的准备工作,再通过bind IPC向App进程发送scheduleLaunchActivity请求
  6. App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息
  7. 主线程收到message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法
  8. App开始正式启动,正式进入Activity生命周期,执行完一系列的生命周期方法,UI渲染,然后就可以看到主界面了

【通俗的讲】

  1. 当你点击App图标的时候,你就要告诉系统,“嗨,伙计,我要启动这个哥们了”,我们知道进程间通信大多数是用的Binder机制,就相当于你告诉服务器,我要发起一个请求了啊
  2. 这个服务小弟(系统服务)收到消息后,“那我得去向老大说一下这边想创建个进程出来”,即向孵化器发送请求
  3. 老大(孵化器)听到后,“可以啊,来吧,我给你创建出来,记着到时候去咱们的系统里面做个备案记录下”
  4. 创建出来后,App创建出来后,要去服务小弟那里根据自己的情况,根据自己的情况去工商局办理营业执照(这就是平时我们应用中做一些先做的东西需要在Application中的原因)
  5. 服务小弟(系统服务)去做好记录后,就去叫这个进程起床干活了
  6. App被叫醒后,先送个指令,我得先去洗个脸画个妆
  7. 大脑收到指令后,就走过去那些瓶瓶罐罐的
  8. 然后开始化妆,弄完后出门,就让人看到了

Zygote

  “受精卵”,更倾向于叫孵化器,是由linux的init进程fork出来的,而为了实现资源共享和更快的启动速度,之后所有的进程全都又第一个zygote fork出来

system_server

也是一个进程,所以也是由zygote进程fork出来的,这个从名字也可以看出来是系统级的服务,系统里面的一些重要服务都是在这个进程开启的,像AMS,PMS,WMS

ActivityManagerService

简称AMS,服务端对象,负责系统中所有Activity的生命周期,ams进行初始化的时机非常明确,就是SystemServer进行开启的时候初始化

Launcher

本质上也是一个应用程序,跟普通的App一样,也是继承Activity

 

 

你可能感兴趣的:(Android,android)