文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android系统架构简介

2023-09-14 19:20

关注

一,Android系统架构

Android的系统架构主要分为五层,见下图:
在这里插入图片描述
在这里插入图片描述
从下至上依次是:
Linux内核:
Android基于Linux,由Linux提供核心系统服务,如安全、内存管理、进程管理、网络堆栈、驱动模型等等;
除了标准的Linux内核之外,Android还增加了内核的驱动程序,如显示驱动、音频驱动、
Binder驱动、输入设备驱动、WIFI驱动、电源管理等。
硬件抽象层:
硬件抽象层处于应用程序框架层和Linux内核之间,用于将硬件抽象化,简单来说就是封装Linux内核,对上提供接口,屏蔽实现细节。
硬件抽象层包含很多库模块,每个模块都为特定类型的硬件组件实现接口,例如相机、蓝牙模块。当应用程序框架层API要访问设备硬件时,Android系统会为该硬件组件加载库模块。
Android Runtime:
包含Android虚拟机和核心库,其中虚拟机原本是Dalvik,自2016年之后换成了ART,ART采用AOT技术,将APP的编译时间提前到安装时,以加快运行速度。并且还有垃圾回收等常规虚拟机功能。每个应用都在自己的进程中运行,都有自己的虚拟机实例,ART可运行多个虚拟机
C++ Framework 库:
包含一些原生C/C++库,可以通过NDK调用。
Java API框架层:
提供大量开发人员用到的应用程序接口,集中了很多重要的组件,如Activity、Service、BroadCastReceiver、ContentProvider等
应用层:
最上层的应用,包含系统自带的和第三方开发的APP,如电话、电子邮件、微信、QQ等。

二,Android开机流程以及一些重要进程:

在这里插入图片描述
Boot ROM: 长按电源键开机,手机会首先执行预设在ROM中的引导代码,然后加载引导程序到RAM。
Boot Leader:这是启动Android之前的引导程序,主要是检查RAM,初始化硬件参数等信息
Linux内核:启动Kernel的swapper进程(pid=0):该进程又称为idle进程, 系统初始化过程Kernel由无到有开创的第一个进程, 用于初始化进程管理、内存管理,加载Display,Camera Driver,Binder Driver等相关工作;
启动kthreadd进程(pid=2):是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。 kthreadd进程是所有内核进程的鼻祖。

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

init进程会孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程;
init进程还启动 servicemanager(binder服务管家)、 bootanim(开机动画)等重要服务
init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程(即虚拟机进程), Zygote是所有Java进程的父进程,Zygote进程本身是由init进程孵化而来的。

Java API框架层:
Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:
加载ZygoteInit类,注册Zygote Socket服务端套接字
加载虚拟机
提前加载类preloadClasses
提前加载资源preloadResouces
System Server进程,是由Zygote进程fork而来, SystemServer是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务。
Media Server进程,是由init进程fork而来,负责启动和管理整个C++framework,包含AudioFlinger,Camera Service等服务

APP层:
Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。
所有的App进程都是由Zygote进程fork生成的。

三,一些进程间通信方式:

Binder:Android特有的,采用C/S架构,可用于进程间通信,数据只拷贝一次,效率高、安全性也高
Handler:用于同一个进程不同线程间通信
Socket:也是C/S架构,Socket方式更多的用于Android framework层与native层之间的通信。Socket通信方式相对于binder比较简单。

来源地址:https://blog.csdn.net/qq_43472959/article/details/129880791

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯