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

 

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)
   


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布局

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值