Android启动以及 app 启动流程 笔记

Android启动以及 app 启动流程 笔记_第1张图片

 

Android 启动流程
init 进程是  用户控件鼻祖
zygote 进程是 java进程鼻祖
zygote进程的操作
   1.native 层 做的操作
         1.初始化java运行环境 虚拟机 (内存管理)
         2.注册jni
         3.运行 zygoteinit.main方法  进入java
   2.java 层做的操作
         1.预加载 文件
         2.创建sockt  (systemServer和zygote进程通讯)
         3.zygote fork出 systemServer进程
         4.循环等待 AMS发过来消息  fork进程
 systemServer进程
  1. createSystemContext              创建系统上下文 以及 ActivityThread 上下文
  2.创建 SystemServiceManager   管理 服务的生命周期   有个startServicer方法   返回一个服务
  3.startBootstrapService  引导服务    11之前 创建 AMS  之后创建 ATMS
  4.startCoreservice     核心服务
  5.startOtherService   其他服务   PMS WMS 都在这里  启动lanucher进程 (也就是lanucherApp)
   

Android启动以及 app 启动流程 笔记_第2张图片
app 启动流程  (参考地址 https://zhuanlan.zhihu.com/p/465105920)
  1.创建进程  
    1.Android  lanucher app 衔接上面操作
       startOtherService  里面会向 systemService里面进行bindler通讯 ,systemservice判断 lanucher进程是否存在 第一次肯定
       是不存在的 ,systemServer进程通过socket与zygote进程通讯   zygote fork出 lanucher进程 并交给AMS 管理
    2.手机上面点击 icon 启动流程
       手机整体相当于个app  (lanucherapp)点击icon 启动app 相当于跳转一个app  ,lanucher进程收到startActivity方法  通过binder通讯到 systemserver进程中
       sysytemserver 进程会判断有没有当前activity的进程  有的话直接用  没有的话 通过socket通讯 通过zygote进程进行fork出 app进程
  2.创建 app 主线程    进程创建好之后会生成 ActivityThread 主线程  也就是我们常说的ui线程,执行main方法  并生成applicationThread Loop Handler 对象,并执行loop.loop方法
     这就是主线程不用 调用loop.loop的原因  在进程创建好了之后 就已经执行的了
  3.创建 application activity   ActivityThread 中的main方法会调用attach方法 进程间通讯 到sysytemServer进程中 让AMS 调用 attachAplication方法 在attachaplication方法中 AMS
     会调用 bingApplication  以及scheduleLanucherActivity 方法  通知app进程中 handler对象 创建application以及activity 并执行相对应生命周期
  4.ui布局以及绘制  创建activity的时候  会生成phoneWindow --》 decorview--》contentView    contentView 就是 activity中 setContentView的layout布局

 Android启动以及 app 启动流程 笔记_第3张图片

 

你可能感兴趣的:(面试资料,android,ui,java)