《深入理解Android:Telephony原理剖析与最佳实践》一1.2 Android系统架构

简介: 本节书摘来自华章出版社《深入理解Android:Telephony原理剖析与最佳实践》一 书中的第1章,第1.2节,作者:杨青平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.2 Android系统架构

前面学习了智能手机的基本硬件结构,可以通过功能手机与智能手机的特点和区别从本质上认识它们。Android智能手机操作系统作为运行在AP上的开源智能手机操作系统,其系统架构是什么样的呢?我们先看看图1-2。
通过图1-2不难发现,Android手机操作系统是一个基于Linux Kernel的分层智能手机操作系统,其共分为4层,从上到下分别是Java Applications(应用层)、Java Frameworks(应用框架层)、User Libraries(系统运行库层)和Linux Kernel(核心层),下面将对这4层进行简要的分析和介绍。

1.2.1 应用层

Android近几年的发展可谓迅猛,之所以会出现这样的情况,一个很重要的原因就是它的应用非常多。安卓市场已发布的软件个数和软件下载量目前仅次于苹果的应用商店,并且保持着快速增长的态势。这些第三方发布的应用(如游戏、导航、播放器、桌面主题等)日益丰富,终端用户才能不断地发展和壮大,而这些应用均在应用层运行。

screenshot

应用层包括了Android各种应用程序,这些应用程序使用Java语言开发并运行在Dalvik虚拟机上,在Android系统架构中的第一层。在Android源码和SDK(Software Development Kit,软件开发工具包)中,Google已经捆绑和发布了一些核心应用及源代码,如Dialer、MMS、日历、Google地图、浏览器、联系人等。

1.2.2 应用框架层

如图1-2所示,Android系统框架中的第二层是框架层,它是用Java语言实现和开发的。有了框架层,开发者使用框架层提供的API便可以非常方便地访问设备硬件、获取位置信息、向状态栏添加通知消息、设置闹铃等,而不必关心底层具体的实现机制和硬件实现方式。这样,简化了Android应用程序开发的架构设计,从而开发者能够快速开发新的应用程序。
应用框架层是Google发布的核心应用所使用的API框架,开发人员可以使用这些框架提供的API来快速开发自己的应用程序,下面是Android中一些主要的组件的简单介绍及相关说明。
Views(视图):在Android SDK中介绍了非常丰富的Views使用方法及相关属性,所有的Android应用程序由这些Views构成,主要包括了列表(Lists)、网格(Grids)、文本框(Text)、按钮(Buttons)等基础Android应用的界面控件。
Resource Manager(资源管理器):提供非代码资源转换和访问,如本地字符串(XML文件配置)、图片和布局文件(Layout Files,使用XML文件配置)。
Notification Manager (通知管理器):应用可以在状态栏中显示自定义的提示信息,如新短信通知、未接来电通知、手机信号量通知等。
Activity Manager(Activity管理器):用来管理Android应用程序界面的生命周期(onCreate创建、onResume显示、onPause暂停、onStop停止等),一个手机屏幕界面可对应一个Activity。

1.2.3 系统运行库层

如图1-2所示,Android系统架构中的第三层为系统运行库层,这一层主要包含了手机系统平台必须的C/C++核心库、Dalvik虚拟机运行环境和HAL子层。我们跳过HAL,先简单地介绍和分析Android包含的C/C++核心库和Dalvik虚拟机运行环境。

  1. C/C++核心库
    系统运行库层包含一个C/C++库的集合,当使用应用框架的一些接口时,系统运行库层通过C/C++核心库来支持对应的组件使用,使其能更好地为Android应用开发者服务。下面是一些主要的核心C/C++库及其简要说明。

libc(系统C库):C语言标准库,处于系统最底层的系统库,由Linux系统来调用。
Media Frameworks(多媒体库):Android系统多媒体库,支持当前手机平台上主流的音频和视频格式的播放和录制,以及静态图像,如MPEG-4、MP3、AAC、JPG、PNG等多媒体格式。
SGL:2D图形引擎库。
OpenGL:对3D效果的支持。
SQLite:轻量级关系数据库引擎,可用来增、删、改、查通话记录、联系人等信息内容。
WebKit:新式的Web浏览器引擎,支持当前非常流行的HTML 5。
SSL:基于TCP/IP网络协议,为数据安全通信提供支持。

  1. Dalvik虚拟机运行环境
    系统运行库层包含了Android Runtime,其核心为Dalvik虚拟机。每一个Android应用程序都运行在Dalvik虚拟机之上,且每一个应用程序都有自己独立运行的进程空间;Dalvik虚拟机只执行DEX(Dalvik Executable)可执行文件。

DEX格式是专为Dalvik设计的一种压缩格式,适用于内存和处理器速度有限的系统;要生成DEX格式文件,首先要通过Java程序编译生成class文件,然后通过Android提供的dx工具将class文件格式转换成DEX格式。
Dalvik虚拟机的特性总结如下:
每个Android应用运行在一个Dalvik虚拟机实例中,而每一个虚拟机实例都是一个独立的进程空间;
虚拟机的线程机制、内存分配和管理、Mutex(进程同步)等的实现都依赖底层Linux操作系统;
所有Android应用的线程都对应一个Linux线程,因而虚拟机可以更多地使用Linux操作系统的线程调度和管理机制。
注意 因为Android的编程语言是Java语言,所以我们容易将Dalvik虚拟机与Java虚拟机认为是同一个东西。Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容;它们之间最大的不同在于:Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的是其专有的DEX格式的文件。

1.2.4 核心层

Android 4.0基于Linux Kernel 3.0.8提供核心系统服务,例如文件管理、内存管理、进程管理、网络堆栈、驱动模型等操作系统的基本服务能力。核心层内核同时也作为硬件和软件之间的抽象层,需要一些与移动设备相关的驱动程序支持,主要的驱动如下所示。
Display Driver(显示驱动):基于Linux的帧缓冲驱动。
Keyboard Driver(键盘驱动):输入设备的Key键盘驱动,比如Home待机、Menu菜单、Return返回、Power电源等设备按键。
Audio Driver(音频驱动):常用的基于ALSA(Advanced Linux Sound Architecture)的高级Linux声音体系驱动。
Power Management(电源管理):比如电池电量、充电、屏幕开启关闭等管理。
Binder IPC驱动:Android平台上一个特殊驱动程序,具有单独设备访问节点,用来提供IPC进程间通信的功能。
Bluetooth Driver(蓝牙驱动):基于IEEE 802.15.1标准的蓝牙无线传输技术。
Wi-Fi Driver(Wi-Fi驱动):基于IEEE 802.11标准的Wi-Fi驱动程序。
Camera Driver(照相机驱动):常用的基于Linux的照相机驱动。

相关文章
|
5天前
|
设计模式 前端开发 Android开发
Android应用开发中的MVP架构模式解析
【5月更文挑战第25天】本文深入探讨了在Android应用开发中广泛采用的一种设计模式——Model-View-Presenter (MVP)。文章首先概述了MVP架构的基本概念和组件,接着分析了它与传统MVC模式的区别,并详细阐述了如何在实际开发中实现MVP架构。最后,通过一个具体案例,展示了MVP架构如何提高代码的可维护性和可测试性,以及它给开发者带来的其他潜在好处。
|
13天前
|
Android开发 移动开发 小程序
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
|
14天前
|
Android开发
Android 如何将定制的Launcher成为系统中唯一的Launcher
Android 如何将定制的Launcher成为系统中唯一的Launcher
27 2
|
1天前
|
持续交付 Android开发 开发者
构建高性能微服务架构:后端开发的终极指南构建高效Android应用:Kotlin与Jetpack的完美结合
【5月更文挑战第28天】 在现代软件开发的浪潮中,微服务架构已经成为了设计灵活、可扩展且易于维护系统的重要模式。本文将深入探讨如何构建一个高性能的微服务架构,涵盖从基础概念理解到实践策略部署的全过程。我们将讨论关键的设计原则、技术选型、性能优化技巧以及安全性考虑,旨在为后端开发者提供一个全面的指南,帮助他们构建出能够适应快速变化的市场需求和技术挑战的系统。 【5月更文挑战第28天】 在移动开发的世界中,效率和性能是衡量一个应用成功与否的关键因素。本文将深入探讨如何通过结合Kotlin语言和Android Jetpack组件,来构建一个既高效又易维护的Android应用。我们将透过实际案例分析
|
2天前
|
存储 人工智能 安全
移动应用与系统:探索开发与操作系统的融合安卓应用开发:打造高效用户界面的关键技术
【5月更文挑战第27天】 随着移动互联网的飞速发展,移动应用和操作系统已经成为了我们日常生活中不可或缺的一部分。本文将深入探讨移动应用开发的关键要素,以及移动操作系统的核心功能。我们将分析移动应用开发的挑战和机遇,并讨论移动操作系统如何适应不断变化的技术环境。通过深入研究这些主题,我们希望为读者提供对移动应用和系统领域的全面理解。
|
2天前
|
存储 缓存 算法
深入理解操作系统内存管理:分页系统的优势与挑战构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】 在现代计算机系统中,内存管理是操作系统的核心功能之一。分页系统作为一种内存管理技术,通过将物理内存划分为固定大小的单元——页面,为每个运行的程序提供独立的虚拟地址空间。这种机制不仅提高了内存的使用效率,还为多任务环境提供了必要的隔离性。然而,分页系统的实现也带来了一系列的挑战,包括页面置换算法的选择、内存抖动问题以及TLB(Translation Lookaside Buffer)的管理等。本文旨在探讨分页系统的原理、优势及其面临的挑战,并通过分析现有解决方案,提出可能的改进措施。
|
4天前
|
Android开发
【通讯录教程】苹果安卓鸿蒙系统通用,如何大批量导入手机号码到手机的通讯录,下面教你方法,只需1分钟搞定几万个号码的导入手机电话本
该文介绍了一种快速批量导入手机通讯录的方法,适用于处理大量手机号的需求,如微商管理、客户资料整理等。在QQ同步助手开始收费后,提供了免费的替代方案。步骤包括:下载批量导入软件(链接提供腾讯云盘和百度网盘地址),清空通讯录(非必需),制作符合格式的通讯录文件,并按操作系统(苹果、安卓或鸿蒙)进行导入。整个过程只需1分钟,简便快捷。
|
12天前
|
XML 前端开发 Android开发
Android架构设计——MVC,滴滴 战略 面试
Android架构设计——MVC,滴滴 战略 面试
|
12天前
|
XML 前端开发 Android开发
Android架构设计——MVC(1),Android多进程从头讲到尾
Android架构设计——MVC(1),Android多进程从头讲到尾
|
12天前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)