• Android系统启动


    --摘自《Android进阶解密》

    一。启动电源以及系统启动

      当电源按下时引导芯片代码聪预定义的地方(固化在ROM)开始执行。加载引导程序到BootLoader到RAM,然后执行

    二。引导程序BootLoader

      引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行

    三。Linux内核启动

      当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置时,它首先在系统文件中寻找init.rc文件,并启动init进程

    四。init进程启动

      初始化和启动属性服务,并且启动Zygote进程

      1)创建和挂载启动所需的文件目录

      2)初始化和启动属性服务

      3)解析init.rc配置文件并启动Zygote进程

    五。Zygote进程

      创建Java虚拟机并为Java虚拟机注册JNI方法,创建服务器端Socket,启动SystemServer进程

      1)创建AppRuntime并调用其start方法,启动Zygote进程

      2)创建Java虚拟机并为Java虚拟机注册JNI方法

      3)通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层

        3.1)创建一个Server端的Socket

        3.2)预加载类和资源

        3.3)启动SystemServer资源

        3.4)等待AMS请求创建新的应用程序进程

      4)通过registerZygoteSocket方法创建服务器端Socket,并通过sunSelectLoop方法等待AMS的请求来创建新的应用程序进程

      5)启动SystemServer进程

    六。SystemServer进程启动

      启动Binder线程池和SystemServiceManager,并且启动各种系统服务

      1)启动Binder线程池,这样就可以与其他进程进行通信

      2)创建SystemServiceManager,其用于对系统的服务进行创建、启动和生命周期管理

      3)启动各种系统服务

    七。Launcher启动

      被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上

     

    知识点:

    1.与JVM相比,Dalvik虚拟机(DVM)是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有的程序都被关闭

    2.DVM中的应用每次运行时,字节码都需要通过即时编译器JIT转换为机器码,这会是的应用的运行效率降低。而在ART中,系统在安装应用时会进行一次预编译(AOT),将字节码预先编译成机器码并存储在本地,这样应用每次运行时就不需要执行编译了,运行效率也大大提高

    3.将控制硬件的动作放在硬件抽象层中,硬件抽象层的代码在hardware/目录中,这是手机厂商改动最大的部分,根据手机终端所采用的硬件平台不同会有不同的实现

    4.init进程是Android系统中用户空间的第一个进程,进程号为1

    5.子进程有时虽然已经退出了,但是在系统进程表中还为它保留了一定的信息(比如进程号、退出状态、运行时间等),这个子进程就被称作僵尸进程

    6.在Android8.0中对init.rc文件进行了拆分,每个服务对应一个rc文件,Zygote启动脚本在init.zygote64.rc中定义

    7.Windows平台有个注册表管理器,注册表的内容采用键值对的形式来记录用户、软件的一些使用信息。即使系统或者软件重启,其还是能够根据之前注册表中的记录,进行相应的初始化工作。Android也提供了一个类似的机制,叫做属性服务

    8.DVM和ART、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也称它为孵化器

    9.SystemServer进程主要用于创建系统服务,我们熟知的AMS、WMS和PMS都是由它来创建的

    10.官方把系统服务分为三种类型,分别是引导服务、核心服务和其他服务

    11.系统的运行模式分三种,分别是非工厂模式、低级工厂模式和高级工厂模式

    12.通俗讲Launcher就是系统的桌面,它的作用主要有以下两点

      1)作为Android系统的启动器,用于启动应用程序

      2)作为Android系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件

    欢迎关注我的微信公众号:安卓圈

  • 相关阅读:
    js类中的static、public、private、protected
    BOM—Browser Object Model and DOM—Document Object Model
    Vue之vue中的data为什么是一个函数+vue中路径别名alias设置
    vue之nextTick
    情感分析-英文电影评论
    wiki中文语料的word2vec模型构建
    python正则表达式
    leetcode
    智力题
    Event Recommendation Engine Challenge分步解析第七步
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/10161123.html
Copyright © 2020-2023  润新知