当前位置: 首页 > news >正文

Android 系统架构

目录

Android 系统架构

1.  Android 应用层

2.  Android应用框架层

2.1  Activity Manager (活动管理器)

2.2  Window Manager (窗口管理器)

2.3   Content Provider (内容提供器)

2.4  View System(视图系统)

2.5  Notification Manager(通告管理器)

2.6  Package Manager (包管理器)

2.7  Telephony Manager(电话管理器)

2.8  Resource Manager (资源管理器)

2.9   Location Manager (位置管理器)

2.10  GTalk Service

3.  Android 核心库

3.1  Surface Manager

3.2  Media Framework

3.3  SQLite

3.4  OpenGL|ES

3.5  FreeType

3.6  WebKit

3.7  SGL

3.8  SSL

3.9  Libc

4.  Android运行时(Run Time)

4.1  什么是 Dalvik

4.2  什么是ART

4.3  Dalvik 与 ART 的区别

5.  Linux内核层


Android 系统架构

        Android 是在 Linux内核的基础上,使用一种可称为“软件层级”的架构组织起来的。“软件层级”架构是指它含有多个层次,而每层都是由多个软件模块或软件库组成。Android的架构共有四层,如图 1-1 所示。

        纵观整个Android系统架构,各种开源的软件包和各种主流的编程语言全部都有“用武之地”,从下到上,一同构建出了一款移动操作系统。从编程语言的角度来看,如图 1-1 中所示,所有红色部分都是C语言写的:所有绿色部分都是由C++为主,而辅之以C写成的有用的本地库:所有蓝色部分则都是 Java 语言写成的。从开发者的角度来看,如果我们只是开发一般的应用程序,则只需要使用 Java 语言在应用层做开发即可。如果要开发一些个人或公司自用的框架,则同样使用Java在前两层进行开发即可。如果要做 Android系统级开发,则需要深入本地库和Java运行时环境层,使用C++和C进行开发。如果需要开发Android的驱动程序,则需要从Linux内核层开始开发。

图1-1 Android系统架构示意图

1.  Android 应用层

应用层是Android设备真正与用户进行交互的一层, Android设备上的应用程序都是运行在这一层的。其中包括Google开发的应用软件,比如电话、短信、电子邮件、浏览器等,也包括一般开发者所开发的应用软件。这一层使用Java作为其开发语言。

2.  Android应用框架层

        框架层是我们从事 Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能的。该层简化了组件的重用,开发人员可以直接使用其提供的组件来进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。由于在其下已经运行了Java运行时环境,所以这一层使用Java语言作为开发语言。Android应用框架层主要包含如下内容。

2.1  Activity Manager (活动管理器)

管理各个应用程序生命周期以及通常的导航回退功能。

2.2  Window Manager (窗口管理器)

管理所有的窗口程序。

2.3   Content Provider (内容提供器)

使得不同应用程序之间存取或者分享数据。

2.4  View System(视图系统)

构建应用程序的基木组件.

2.5  Notification Manager(通告管理器)

使得应用程序可以在状态栏中显示自定义的提示信息。

2.6  Package Manager (包管理器)

Android 系统内的程序管理。

2.7  Telephony Manager(电话管理器)

管理所有的移动设备功能。

2.8  Resource Manager (资源管理器)

提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等。

2.9   Location Manager (位置管理器)

提供位置服务。

2.10  GTalk Service

提供Google Talk服务。

3.  Android 核心库

        本地库是应用程序框架的基础,是连接应用程序框架层与Linux内核层的重要纽带。主要含有以下几个重要的库。

3.1  Surface Manager

        执行多个应用程序时候,负责管理显示与存取操作问的互动,另外也负责2D绘图与3D绘图进行显示合成。

3.2  Media Framework

        多媒体库,基于PacketVideo OpenCore,支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、 ARM.

3.3  SQLite

小型的关系型数据库引擎。

3.4  OpenGL|ES

根据OpenGL ES 1.0 API 标准实现的3D绘图函数库。

3.5  FreeType

提供点阵字与向量字的描绘与显示。

3.6  WebKit

一套网页浏览器的软件引擎。

3.7  SGL

底层的 2D 图形渲染引擎。

3.8  SSL

在Android上通信过程中实现握手。

3.9  Libc

从BSD继承来的标准C 系统函数库,专门为基于嵌入式Linux 的设备定制。

4.  Android运行时(Run Time)

        Android 应用程序是用 Java 语言编写的,所以 Android 需要一个 Java 的运行时环境,该环境又包括核心库和Dalvik虚拟机两部分。

        核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如 android.os、android.net、 android.media等等。

        Android 程序不同于J2ME 程序。每个 Android 应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一个Dalivik虚拟机的实例,并在该实例中执行。Dalvik虚拟机不是传统的基于栈的虚拟机,而是一种基于寄存器的Java虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。需要注意的是,个同于J2ME,Android 程序在虚拟机中执行的并非编译后的字节码,而是通过转换工具 dx 将 Java字节码转成 dex 格式的中间码。

注:ART 和Dalvik 的联系和区别:

4.1  什么是 Dalvik

        Dalvik 是 Google 公司自己设计用于 Android 平台的 Java 虚拟机。dex 格式是专为 Dalvik应用设计的一种压缩格式,适合于内存和处理器速度有限的系统。Dalvik允许同时运行多个虚拟机的实例,并且每一个应用作为独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

4.2  什么是ART

        在 Dalvik 下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这一机制并不高效,但让应用安装比较快,而且更容易在不同硬件和架构上运行。ART完全改变了这种做法,在应用安装时就预编译字节码到机器语言,在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。ART是在Android 4.4版本之后出现的,用于替代 Dalvik 虚拟机。

4.3  Dalvik 与 ART 的区别

(1)在 Dalvik 下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这虽然会使安装过程比较快,但是会拖慢应用以后每次启动的效率。而在 ART 环境中,应用在第一次安装的时候,字节码就会预编译(AOT)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。

(2)ART 占用空间比 Dalvik 大(字节码变为机器码之后,可能会增加 10%-20%),这也是著名的“空间换时间大法”。

(3)预编译也可以明显改善电池续航,因为应用程序每次运行时不用重复编译了,从而减少了CPU的使用频率,降低了能耗。

5.  Linux内核层

        Android是在Linux内核的基础上构建的, Android的内核属于Linux内核的一个分支,它并不是GNU/Linux,因为一般在GNU/Linux中被支持的功能,在Android大多没有被支持。众所周知,Linux 是一个开源的操作系统,由非营利的组织——Linux 基金会所管理。虽然Linux是开源的,但是Android必须在GNU GPL (用于保护开源软件的一个授权规范)的许可下使用Linux的源码,才可以商用。所以为了达到商业应用的目的,Android必须去除被GNU GPL所约束的部分。Android去除了Cairo、 X11、 Alsa、 FFmpeg、 GTK、 Pango和Glibe等,并以Bionic取代Glibe,以Skia取代Cairo,以Opencore取代FFmpeg等。Android 并没有用户空间驱动,而是将所有的驱动都放在内核空间中,并以 HAL 隔开版权问题。

        目前, Android的Linux内核层包括安全管理、内存管理、进程管理、网络协议栈、驱动程序模型和电源管理等,这些都依赖于Linux内核。由于Linux内核全部使用C语言编写,所以Android的Linux内核层也全部是用C语言编写的。

相关文章:

Android 系统架构

目录 Android 系统架构 1. Android 应用层 2. Android应用框架层 2.1 Activity Manager (活动管理器) 2.2 Window Manager (窗口管理器) 2.3 Content Provider (内容提供器) 2.4 View System(视图系统&a…...

【Docker】Python Flask + Redis 练习

一、构建flask镜像 1.准备文件 创建app.py,内容如下 from flask import Flask from redis import Redis app Flask(__name__) redis Redis(hostos.environ.get(REDIS_HOST,127.0.0.1),port6379)app.route(/) def hello():redis.incr(hits)return f"Hello Container W…...

shell_52.Linux测试与其他网络主机的连通性脚本

实战演练 本节将展示一个实用脚本,该脚本在处理用户输入的同时,使用 ping 命令或 ping6 命令来测试与其他网络主机的连通性。 ping 命令或 ping6 命令可以快速测试网络主机是否可用。这个命令很有用,经常作为首选工具。如果只是检查单个主机&…...

OpenCV C++ 图像处理实战 ——《缺陷检测》

OpenCV C++ 图像处理实战 ——《缺陷检测》 一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型三、图像配准3.1 功能源码3.1 功能效果四、多元模板图像4.1 功能源码五、缺陷检测5.1 功能源码六、源码测试图像下载总结一、结果演示...

Python操作MySQL基础使用

Python操作MySQL基础使用 链接数据库并查询数据 import pymysql# 链接数据库 conn pymysql.connect(host10.5.6.250,port3306,userroot,password******** )# 查看MySQL版本信息 print(conn.get_server_info()) # 5.5.27# 获取到游标对象 cursor conn.cursor()# 选择数据库…...

【pytorch】pytorch中的高级索引

这里只介绍pytorch的高级索引,是一些奇怪的切片索引 基本版 a[[0, 2], [1, 2]] 等价 a[0, 1] 和 a[2, 2],相当于索引张量的第一行的第二列和第三行的第三列元素; a[[1, 0, 2], [0]] 等价 a[1, 0] 和 a[0, 0] 和 a[2, 0],相当于索…...

基于图像识别的自动驾驶汽车障碍物检测与避障算法研究

基于图像识别的自动驾驶汽车障碍物检测与避障算法研究是一个涉及计算机视觉、机器学习、人工智能和自动控制等多个领域的复杂问题。以下是对这个问题的研究内容和方向的一些概述。 障碍物检测 障碍物检测是自动驾驶汽车避障算法的核心部分,它需要从车辆的感知数据…...

Spring boot定时任务

目录 前言一、使用 Scheduled 注解二、使用 ScheduledExecutorService三、使用 Spring 的 TaskScheduler四、使用第三方调度框架 前言 在 Spring Boot 中,有多种方法来编写定时任务,以执行周期性或延迟执行的任务。下面是几种常见的方式 一、使用 Sche…...

Glide原理

本文基于Carson整理 1.简介 相比其他几种图片加载框架,Glide性能最好。这得益于其高效的图片缓存策略 其还有多样化的媒体格式加载:如GIF、Video,对于商城首页需展示丰富样式、信息的页面需求来说,也是必不可少的。 2.加载原理…...

wps表格按分隔符拆分单元格

有数据如下;看选中区域,一个单元格中有一个v,空格,然后有三个数值,以空格分开;点击菜单中的数据-分列; 弹出分列向导;选择 分隔符号; 选择分隔符为空格;出现预…...

【SEC 学习】Vim 的基本使用

一、Vim 编辑器安装 yum install -y vim二、Vim 三种模式 命令模式 编辑模式 末行模式 三、三种模式之间的转换 1. 命令模式 -> 编辑模式 快捷键含义i从光标处插入I从光标所在行首插入a从光标后插入A从光标所在行末插入o从光标下一行插入O从光标上一行插入 2. 命令模式 …...

Linux中shell脚本练习

目录 1.猜数字 2.批量创建用户 3.监控网卡Receive Transmit 数据的变化 4.部署Linux 5.系统性能检测脚本 6.分区脚本 7.数据库脚本 1.猜数字 随机数的生成 使用环境变量RANDOM,范围是0~32767 编写guest.sh,实现以下功能&#xff1…...

AS/400简介

AS400 AS400 简介AS/400操作系统演示 AS400 简介 在 AS400 中,AS代表“应用系统”。它是多用户、多任务和非常安全的系统,因此用于需要同时存储和处理敏感数据的行业。它最适合中级行业,因此用于制药行业、银行、商场、医院管理、制造业、分销…...

FreeRTOS 中断管理介绍和实操

目录 中断定义 中断优先级 相关注意 中断相关函数 1.队列 2.信号量 3.事件标志组 4.任务通知 5.软件定时器 中断管理实操 中断定义 中断是指在程序执行的过程中,突然发生了某种事件,需要立即停止当前正在执行的程序,并转而处理这个…...

性能测试 —— Jmeter 常用三种定时器!

1、同步定时器 位置:HTTP请求->定时器->Synchronizing Timer 当需要进行大量用户的并发测试时,为了让用户能真正的同时执行,添加同步定时器,用户阻塞线程,知道线程数达到预先配置的数值,才开始执行…...

ROS自学笔记十七:Arbotix

ArbotiX 是一个基于 ROS(Robot Operating System)的机器人控制系统,它旨在为小型机器人提供硬件控制和传感器接口,以便于机器人的运动和感知。以下是有关 ROS 中 ArbotiX 的简介和安装步骤: ArbotiX 简介 ArbotiX 主…...

Mac电脑窗口管理Magnet中文 for mac

Magnet是一款Mac窗口管理工具,它可以帮助用户轻松管理打开的窗口,提高多任务处理效率。以下是Magnet的一些主要特点和功能: 分屏模式支持:Magnet支持多种分屏模式,包括左/右/顶部/底部 1/2 分屏、左/中/右 1/3 分屏、…...

Centos7 部署 Stable Diffusion

参考:https://www.jianshu.com/p/ff81bb76158a 遇到的问题: 1、git clone 比较慢 解决办法:设置代理 https://blog.csdn.net/dszgf5717/article/details/130735389 2、pip install 比较慢 解决办法:更换源或设置代理 https:/…...

【Python】一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格

题目要求:一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格 例:(为了方便观看,以 ▢ 代替空格) 输入:123▢▢abc▢▢▢python 输出:123▢abc▢python 参考…...

嵌入式项目电灯

1、原理,电灯有个正负极,当正确接入电源正负极就能点亮(如正极5v,负极0v),单两边同时接入正极,就不会亮(两端都是5v),所以通过控制电平,来实现控制led等的亮暗 cpu通过给…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

DiscuzX3.5发帖json api

参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...