Android 系统启动流程

Google提供的5层架构图。 

  1. Linux Kernel Linux Kernel 是整个 Android 系统的基础,它管理着 CPU、GPU、内存、I/O 设备等底层硬件设备,同时提供了 POSIX API 和其他基本的系统服务。在 Android 系统中,Linux Kernel 按照一定格式和要求被编译为可在 Android 系统上运行的内核映像。

  2. Hardware Abstraction Layer (HAL) Hardware Abstraction Layer (HAL) 是 Android 系统为了处理设备间差异性而引入的策略,它封装了不同设备负责的底层硬件,以统一管理硬件服务。HAL 为上层应用程序提供了一个统一的接口,屏蔽了底层硬件的特定差异性,并通过 JNI 来与 Native 代码进行交互。

  3. Native Libraries and Android Runtime Native Libraries和Android Runtime是 Android 系统提供的两种不同类型的库。Native Libraries 是由C/C++编写的底层实现,直接运行在 Native 层上,用于实现底层的硬件访问和图像处理。而 Android Runtime 则是整个系统的主要 Java 虚拟机,它可以 JIT 编译Dalvik 和 ART 应用程序的字节代码,以提供更快的执行效率。

  4. System Libraries System Libraries 是 Android 系统提供的一组预编译的库,包括各种 Java 和 C++ 库,用于提供对特定功能的访问接口,例如媒体处理、网络服务、图形处理等。

  5. Framework层 Framework层是 Android 系统的核心框架,,包括 Activity Manager、Window Manager、Telephony Manager、Power Manager、Location Manager、Notification Manager等等一些系统级别的服务。它们提供了一组核心的API,为应用程序开发提供高级别的系统服务。

  6. Applications 应用程序是 Android 系统中的顶层部分,所有应用程序都运行在安卓操作系统上。应用程序使用 Android 提供的框架和 API,以及自己编写的代码来实现特定的功能,例如游戏、社交媒体、商务和办公等相关应用。

 

Android系统启动流程

根据Google提供的5层Android架构图详细讲解Android系统启动流程:

  1. Bootloader 首先,系统启动时由Bootloader加载,Bootloader是位于开发板上的小型引导程序,它在硬件上电后首先自动运行。Bootloader是嵌入式系统中的标准组件,其主要任务是初始化硬件、检测启动设备、读取启动设备上的固件映像,并将控制权转移到操作系统启动映像上。

  2. Kernel 接下来,Bootloader从设备的存储介质中引导内核。内核是操作系统的核心部分,它的主要任务是管理所有硬件资源,例如处理器、内存、网络设备和存储设备等,并提供各种系统服务。

  3. System Server 一旦内核启动,系统启动中的第一个用户空间进程便是System Server。System Server 是 Android 中最重要的服务之一,提供了大量的系统服务和管理功能,例如ActivityManager、WindowManager、PackageManager等等,为Android应用和系统组件提供关键的基础服务。

  4. Android Runtime Android Runtime 应用程序运行在虚拟机中,主要处理应用程序的编译、调试、优化和调用。Android Runtime 使用了现代的基于AOT(Ahead of Time)/ JIT(Just in Time) 的技术来提高应用程序的执行效率。

  5. Applications 最后,启动应用程序。Android中所有应用程序都是在沙箱里面运行的,每个应用程序都有自己的用户ID和文件系统,从而确保应用的安全性和隔离性。应用程序可以访问自己的特定数据存储区(如SharedPreferences和SQLite)以及在Android中可用的所有系统级服务(如位置、网络、媒体和传感器服务)。

总之,以上是Android系统启动流程的基本过程。系统启动从Bootloader开始,然后启动内核、System Server、Android Runtime,最后进入应用程序启动。每个阶段都具有自己的特定任务,并通过系统服务和组件协同工作,最终将Android系统启动起来。

Android Display 流程中的进程

Android 设备的显示过程中,会使用多个进程来协同工作,下面简要介绍了其中涉及的主要进程:

1. Bootloader 进程:当Android设备上电时,Bootloader首先运行并加载Kernel映像。

2. Kernel 进程:内核启动后会初始化设备的硬件,然后挂载文件系统,并启动系统服务进程 Init。

3. Init 进程:Init 进程是Android系统启动过程中第一个用户空间进程,负责启动 Android 系统中的各个进程和组件,包括系统服务,例如 MediaServer 和 SurfaceFlinger。

4. System Server 进程:System Server 是 Android 中最重要的服务之一, 负责启动和管理系统中大量的核心服务和组件,例如 ActivityManagerService(AMS)和 WindowManagerService(WMS)等。

5. SurfaceFlinger 进程:SurfaceFlinger 进程是一个系统服务,负责所有显示请求,负责合成所有图形层,以及显示应用程序所渲染的内容,将它们输出到屏幕上。

6. MediaServer 进程:MediaServer 进程是系统中处理多媒体任务的主要进程。它负责管理和处理音频和视频相关的任务,例如媒体播放、录制等。

7. App 进程:App 进程是应用程序的主要进程,负责对用户提供的数据进行处理,并向 SurfaceFlinger 进程发送绘图请求,将应用程序渲染的图像数据分别合并,渲染最终的屏幕显示。

8. Zygote 进程:Zygote 进程是一个特殊的进程,它负责服务其他应用程序进程的父进程。根据类名和应用程序所属的进程类型创建新的应用程序进程,从而加快应用程序启动进程。

总之,以上进程围绕着图像合成、显示桌面、多媒体处理、应用程序处理等方面,彼此协同工作,从而让Android 设备能够有效地显示图形元素和多媒体内容,并提供最佳的用户体验。

基础概念:

  • Layer是一种用于管理和显示Android系统中的图形元素的概念,可以理解为是一种用于图形合成的虚拟对象(也称为“表面”),在Android中被大量使用。它可以被视为包含位图或其它图像内容的虚拟平面,类似于图层的概念,每个 Layer 都可以在屏幕上渲染。

    在Android中,Layer主要在SurfaceFlinger和应用程序中使用。应用程序可以通过View的RenderNode创建一个DisplayList,其中包含一组图形和绘图指令,而DisplayList在应用程序和SurfaceFlinger之间构建了一道屏障,从而控制绘图并避免了图像元素的不必要重绘,提高了渲染效率。SurfaceFlinger根据应用程序和系统服务发送的请求,将图形元素存储到缓存中,并合成它们以形成最终的屏幕显示。

    在应用程序中,每个View都可以作为一个图层,这可以由系统自动处理。在SurfaceFlinger中,每个应用程序图层和系统服务图层也可以作为一个 Layer,而 SurfaceFlinger正是通过Layer的合成和渲染,实现最终的显示效果。Layer使Android系统能够快速合成和显示图形元素,从而为用户提供更好的视觉体验。

    总结:Layer是Android中管理和显示图形元素的概念,被广泛用于SurfaceFlinger和应用程序中,也可以视为虚拟平面,每个Layer都可以在屏幕上渲染。通过Layer的管理和合成,使得Android系统能够更快速、高效地显示图形元素,提高了用户体验。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值