1.      Android架构直观图

下图展示了Android系统的主要组成部分:

总体上而言,Android系统结构由5个部分组成。从上到下,别人是Applications (Android应用层)、ApplicationFramework (Android应用程序框架层)、Libraries、Android Runtime (Anroid执行时)、Linux Kernel (Linux内核)。

当中,Libraries和Android Runtime处于Android框架的同一层。

以下简要介绍这5个部分。

2.      Applications层

Android装配的一个核心应用程序集合,包含电子邮件client、SMS应用程序、日历、地图、浏览器、联系人和其它设置。全部应用程序。无论是用户开发的,还是系统内置的应用程序都在该层。

3.      Application Framework层

Android应用程序的框架层,全部的应用程序都是在该框架的基础上开发出来的。

该框架通过提供开放的开发平台,使开发人员能够编制出极其丰富和新颖的应用程序。

比如,开发人员能够自由地利用设备硬件优势、訪问位置信息、执行后台服务、设置闹钟、向状态栏中加入通知等。同一时候,开发人员能够利用核心应用程序所使用的框架APIs。此外。因为应用程序的体系结构旨在简化组件的重用,不论什么应用程序都能公布它的功能且不论什么其它的应用程序都能使用这些功能。同一时候这一机制还同意用户替换Android的组件。

实际上,全部应用程序是一组服务和系统。它们包含:

● 视图(View): 丰富的、可扩展的视图集合,用于构建一个应用程序,包含列表、网络、文本框、button,以及内嵌的网页浏览器。

● 内容提供者(ContentProviders): 使应用程序可以訪问其它应用程序的数据,或者共享自己的数据。

● 资源管理器(Resource Manager): 使应用程序可以訪问非代码资源。

如本地化字符串、图形图像,以及界面布局文件。

● 通知管理器(Notification Manager): 使全部的应用程序可以在状态栏显示自己定义的警告。

● 活动管理器(Activity Manager): 管理应用程序的生命周期。提供通用的导航回退功能。

4. Libraries层

   Android包括一个C/C++库的集合。供Android系统的各个组件使用。

这些功能通过Android的应用程序框架(application framework)暴露给开发人员。以下列出一些核心库:

● 系统C库: 标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备

● 媒体库: 基于PacketVideo的OpenCORE。这些库支持播放和录制很多流行的音频和视频格式,以及静态图像文件,包含MPEG4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG

● 界面管理: 管理訪问显示子系统和无缝组合多个应用程序的二维和三维图形层

● LibWebCore: 新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图

● SGL: 主要的2D图形引擎

● 3D库: 基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包括高度优化的3D软件光栅

● FreeType: 位图和矢量字体渲染

● SQLite: 全部应用程序都能够使用的强大而轻量级的关系数据库引擎

5. Android Runtime 层

Android 包括一个核心库的集合。提供大部分在Java编程语言核心类库中可用的功能。每个Android应用程序是Dalvik虚拟机中的实例,执行在他们自己的进程中。

Dalvik虚拟机设计成,在一个设备中能够高效地执行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex。dex格式是专为Dalvik 设计的一种压缩格式,适合内存和处理器速度有限的系统。

大多数虚拟机包含JVM都是基于栈的。而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣。一般而言。基于栈的机器须要很多其它指令,而基于寄存器的机器指令更大。dx 是一套工具,能够將Java.class 转换成 .dex 格式。一个dex文件一般会有多个.class。

Dalvik虚拟机依赖于Linux内核提供基本功能。如线程和底层内存管理。

6.Linux Kernel层

Android基于Linux 2.6提供核心系统服务。比如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏详细硬件细节而为上层提供统一的服务。

假设你学过计算机网络知道OSI/RM,就会知道分层的优点就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及下面层的差异。当本层及下面层发生了变化不会影响到上层。也就是说各层各司其职,各层提供固定的SAP(Service Access Point)。专业点能够说是高内聚、低耦合。

Android框架简要介绍的更多相关文章

  1. Android Debuggerd 简要介绍和源码分析(转载)

    转载: http://dylangao.com/2014/05/16/android-debuggerd-%E7%AE%80%E8%A6%81%E4%BB%8B%E7%BB%8D%E5%92%8C%E ...

  2. Android应用程序窗口(Activity)实现框架简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8170307 前面我们学习了SurfaceFli ...

  3. Android编译系统简要介绍【转】

    本文转载自:http://blog.csdn.net/luoshengyang/article/details/18466779 在Android源码环境中,我们开发好一个模块后,再写一个Androi ...

  4. Android窗口管理服务WindowManagerService的简要介绍和学习计划

    在前一个系列文章中,我们从个体的角度来分析了Android应用程序窗口的实现框架.事实上,如果我们从整体的角度来看,Android应用程序窗口的 实现要更复杂,因为它们的类型和作用不同,且会相互影响. ...

  5. [转] Android资源管理框架(Asset Manager)简要介绍和学习计划

    转自:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分内容组成:代码和资源.资源主要就是指那些与U ...

  6. Android应用程序的Activity启动过程简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6685853 在Android系统中,Activ ...

  7. Android资源管理框架(Asset Manager)简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分 ...

  8. [转]Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

    转自:Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划 前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了Surfa ...

  9. Android应用程序组件Content Provider简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Conte ...

随机推荐

  1. ASP.NET MVC上传文件 未显示页面,因为请求实体过大。解方案

    在Dropzone中设置   maxFilesize: 350, //MB 但上传的文件没有到最大限定350MB,就报出来 未显示页面,因为请求实体过大的错误 Web.config中设置  maxAl ...

  2. springboot与mybatis集成

    1)添加依赖 <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId& ...

  3. 向量叉乘 Cross product

    参考:Wiki Cross product

  4. TYVJ 1427 线段树的基本操作

    题意: 单点修改,区间最值 思路: 线段树 原题请戳这里 //By SiriusRen #include <cstdio> #include <cstring> #includ ...

  5. 30秒就能理解的JavaScript优秀代码

    数组 arrayMax 返回数组中的最大值. 将Math.max()与扩展运算符 (...) 结合使用以获取数组中的最大值. const arrayMax = arr => Math.max(. ...

  6. Google浏览器“无法添加来自此网站的应用、扩展程序和应用脚本”的解决办法

    原文链接:https://blog.csdn.net/Fan_Weibin/article/details/80402790 解决方法如下: 在桌面找到Google Chrome图标→右击属性→在快捷 ...

  7. sites for debugging script

    1. javascript debugger online: http://jsfiddle.net/ 2. script(js,python,ruby) debugger online: http: ...

  8. nutz 自定义sql的使用

    虽然提供了Cnd,但是用起来是觉得有点不方便,然后就直接编写Sql语句.nutz提供了一些方法. Nutz.Dao 的自定义 SQL 部分的解决方案是: // 不推荐使用 用户可以硬编码 SQL 语句 ...

  9. Kafka学习笔记(4)----Kafka的Leader Election

    1. Zookeeper的基本操作 zookeeper中的节点可以持久化/有序的两个维度分为四种类型: PERSIST:持久化无序(保存在磁盘中) PERSIST_SEQUENTIAL:持久化有序递增 ...

  10. ZBrush 2018软件安装激活教程一点通

    Zbrush下载地址:https://pixologic.com/CD 安装教程:(此CD代码仅有效一次,一旦此代码被使用,您将收到一封包含你账户信息的电子邮件.请把那封电子邮件保存在你的记录里.) ...