跳至主要內容

Android 系统架构简介

JI,XIAOYONG...大约 2 分钟

说明:本文基于Android 系统开篇 - Gityuan 博客 | 袁辉辉博客open in new window 的学习笔记整理

Android 系统大体分为 4 个模块,从底层开始依次是 1.linux 内核、2.系统库+Android 运行时、3.框架层、4.应用层。

下图描述了 Android 系统从开机到 Apk 运行的整个流程。

系统启动框架图,来自 gityuan.com
系统启动框架图,来自 gityuan.comopen in new window

流程如下:Loader -> Kernel -> Native-> Framework -> App

Loader 层

  1. Boot ROM:开机时,引导芯片从 ROM 读取读取初始化代码,加载引导程序到 RAM 中。
  2. Boot Loader:是启动 Android 系统之前的引导程序,检查 RAM、初始化硬件参数等。

Kernel 层(即 Android 内核层,进入 Android 系统)

  1. swapper 进程(pid=0):Boot Loader 启动 swapper(idle)进程,是由内核创建的第一个进程,用来初始化进程管理、内存管理、驱动等等。
  2. kthreadd 进程(pid=2):是 Linux 系统的内核进程,是所有内核进程的鼻祖

Syscall,在 Native 和 Kernel 之间的系统调用层。


Native 层

  1. init 进程(pid=1):由 swapper 进程创建,是所有用户进程鼻祖
  2. init 进程孵化出用户守护进程、启动 ServiceManager 管理系统服务,启动开机动画 Bootnaim。

JNI,Java 层和 Native(C/C++)层之间。


Framework 层

  1. Zygote 进程:由 init 进程 fork 生成,是Android 系统第一个 java 进程,是所有 java 进程的父进程
  2. SystemServer 进程:由 Zygote 进程 fork 而来,是 Zygote 孵化的第一个进程,负责启动和管理整个java framework,如 ActivityManager、PowerManager...
  3. MediaServer 进程:由 init 进程 fork 而来,负责启动和管理整个C++ framework

APP 层

  1. Launcher:Zygote 进程孵化的第一个 App 进程,桌面 App。
  2. 其他由 Zygote 进程孵化的系统进程(Browser、Phone...)和非系统 app 进程。

扼要内容如图:

系统启动示意图
系统启动示意图

Android 常用的通信方式

  1. Binder
  2. Socket
  3. Handler

Binder/Socket 用于进程间(都具有独立的地址空间)通信,而 Handler 消息机制用于同进程的线程间(共享内存空间)通信

在 Android 系统中:

  • Zygote 进程 --> Socket 机制
  • SystemServer、MediaServer、App 之间 --> Binder IPC
  • 同一进程不同线程间 --> Handler
文章标题:《Android 系统架构简介》
本文作者: JI,XIAOYONG
发布时间: 2018/02/23 22:35:14 UTC+8
更新时间: 2023/12/30 16:17:02 UTC+8
written by human, not by AI
本文地址: https://jixiaoyong.github.io/blog/posts/e3bb9a54.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。转载请注明出处!
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8