• Android系统启动过程


    Android系统启动过程是由Boot Loader引导开机,然后依次进入 -> Kernel -> Native -> Framework -> App,接下来简要说说每个过程:

    • Loader层

    Boot ROM:当手机处于关机状态时,长按Power键开机,引导心片开始从固化在ROM里的预设代码开始执行,然后加载引导程序到RAM;

    Boot Loader:这是启动Android系统之前的引导程序,主要是检查RAM,初始化硬件参数等功能。

    • Kernel,Linux内核层

    Android平台的基础是Linux内核,比如ART虚拟机最终调用底层Linux内核来执行功能。Linux内核的安全机制为Android提供相应的保障,也允许设备制造商为内核开发硬件驱动程序。

    1) 启动Kernel的swapper进程 (pid=0):该进程又称为idle进程,系统初始化过程Kernel由无到有开创的第一个进程,用于初始化进程管理、内存管理,加载Display, Camera Driver, Binder Driver等相关工作;

    2) 启动kthreadd进程 (pid=2):是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。kthreadd进程是所有内核进程的鼻祖

    • 硬件抽像层(HAL)

    硬件抽象层(HAL)提供标准接口,HAL包含多个库模块,其中每个模块都为特定类型的硬件组件实现一组接口,比如wifi/bluetooth模块,当框架api请求访问设备硬件时,Android系统将为该硬件加载相应的库模块。

    • Android Runtime & 系统库

    每个应用都在其自已的进程中运行,都有自已的虚拟机实例。ART通过执行dex文件可在设备运行多个虚拟机,dex文件是一程专为Android设计的字节码格式文件,经过优化,使用内存很少。ART主要功能包括:预先(AOT)和即时(JIT)编译,优的垃圾回收,以及调试相关的支持。

    这里的Native系统库主要包括init孵化来的用户空间的守护进程、HAL层以及开机动画等。启动init进程(pid=1),是Linux系统的用户进程,init进程是所有用户进程的鼻组

    1)init进程会孵化出ueventd, logd, healthd, installd, adbd, lmkd等用户守护进程;

    2)init进程还会启动ServiceManager (binder服务管家)、bootanim(开机动画)等重要服务;

    3)init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程(虚拟机进程),Zygote是所有java进程的父进程,Zygote进程本身是由init进程孵化而来的。

    • Framework层

    1)Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:

      • 加载ZygoteInit类,注册Zygote Socket服务端套接字
      • 加载虚拟机
      • 提前加载类preloadClasses
      • 提前加载资源preloadResouces

    2)System Server进程,是由Zygote进程fork而来的,System Server是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务;

    • App层
      • Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
      • Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上;
      • 所有的App进程都是由Zygote进程fork生成的;
  • 相关阅读:
    Android之旅 刷机 前言
    流程管理的售前意识
    站在企业角度来审视K2
    Android之旅 ROM定制 美化 默认屏的下方操作菜单
    在非K2服务器上部署基于K2的Web Application
    java拦截器与过滤器(转载)
    windows安装rediscluster集群
    SpringBoot使用Nacos配置中心(转载,可用)
    SpringBoot+Dubbo+MybatisPlus整合Seata分布式事务踩坑集合
    转载RabbitMQ教程
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/14124918.html
Copyright © 2020-2023  润新知