AMS启动流程简易版

首先我们要了解zygote是什么

zygote是java进程鼻祖 :分为native层 和 java层

native 层做了些什么

     1、初始化android

     2、注册jni

     3、执行ZygoteInit.main,进入java层

java层做了什么

     1、创建socket--

    2、执行预加载--

    3、通过fork创建SystemServer进程--

    4、进入循环:等待AMS的通知,创建对应进程

ZygoteInit

1、进入main函数通过fork创建进程(frokSystemServer)

,通过反射执行SystemServer的main方法

进程有两个

  • 父进程 Zygote进程

    假如SystemServer的进程id是6000

    Zygote的pid就是6000 返回值等于子id

    SystemServer的pid就是0 没有子id就为0

  • 子进程 SystemServer

2、初始化zygote(调用底层)

执行SystemServer的mai方法

SystemServer

进入main函数

1、创建系统上下文

  • 创建一个ActivityThread线程
  • 执行attach函数
  • 创建SystemContext()
  • 创建app(反射创建)
  • 执行Application.onCreate();

2、创建系统服务

  • 创建服务(服务继承SystemService)
  • 启动服务

3、启动引导服务(AMS)

  • 启动ATMS(android10新增)

  • 启动AMS

    • 创建AMS,管理ATMS

    • 启动AMS

    • systemReady(AMS准备好)

    • 启动Activity

    • 两步检查(startSpecifiaActivity)

      • 存在

        • 添加事务

        • 分发事务

        • ActivityThread分发事务

        • Handler分发消息

        • execute(执行)

        • handleLaunchActivity (处理消息,启动Acitivity)

        • performLaunchActivity

          执行Activity的onCreate

      • 不存在

        • 创建进程
        • 进程启动
        • 启动zygote
        • 创建socket
        • 连接socket
        • 进入zygote
        • 循环等待,有消息,启动app进程
        • 反射执行ActivityThread.main方法
        • attachApplication(ApplicationThread,binder通信)
        • realStartActivityLocked(真正启动)

4、启动核心服务(基本应用层用不上)

5、启动其它服务(WMS)

你可能感兴趣的:(java,jvm,servlet)