美文网首页
8、Android 系统启动流程分析

8、Android 系统启动流程分析

作者: XX杰 | 来源:发表于2023-01-25 13:45 被阅读0次

    linux 中一切皆文件,

    开机的时候走的流程

    1、 开机boot 会调用kernel,然后执行一个 init(pid=1) 的方法,在这个方法里面会通过 Android 的 Zygote (孵化器)开启一些列的 服务
    SystemServer AMS WMS PKMS PMS 等等 , 然后开启 launcher
    2、开启 media server

    补充细节
    1、init(pid=1)会执行 init.c 中的 main 方法, 主要会初始化一些属性
    2、解析 init.rc 文件,开启 binder 和 socket 服务
    3、启动 Zygote 进程
    4、zygote中会启动不同的服务
    总结: init 方法就是 为了 启动app,开机等做一些前提准备和配置
    

    launcher 启动 app

    1、从 zygote 中 fork(复刻) 一个 子进程 来作为要启动的 app 的进程
    2、如果开机,就启动 zygote ,如果启动 app ,就是 fork 。两种都会使用runtime 来启动JVM、socket 之类的
    3、如果是启动 app 。需要创建虚拟机,创建线程,创建自己的zygote,加载资源(字体,recource,openGL,class类等),主动进行一次GC,fork一次SystemServer进程(在这里面启动AMS,WMS 等各种服务)

    补充细节
    1、fork 函数 的作用是创建一个 子进程 ,所以他会返回两次结果,
    一次=0,表示接下来进入子进程 执行流程 。
    不等于 0 表示 接下来要继续执行 父进程 代码
    2、fork 是复制整个空间数据的一种行为,
    如果父进程有不在执行的线程,则不执行的线程直接不复制,直接蒸发掉,有可能有 死锁的 问题
    3、也就是说启动一个 app 就fork 一个 zygote
    

    相关文章

      网友评论

          本文标题:8、Android 系统启动流程分析

          本文链接:https://www.haomeiwen.com/subject/zoehhdtx.html