让我们来快速预览一下整个android系统的架构。从下面的图中我们可以发现,这个架构分为几个不同的层,底层为上一层提供服务。

 Linux Kernel

android系统建立在一个坚固的基石上:Linux内核。Linus Torvalds于1991年创建了它。Linux为android提供了硬件抽象层,使得android可以
很轻松的安装在各种平台上。
从实质上来说,Linux为android提供了内存管理,进程管理,网络服务,和其他的一些系级别的服务。
作为一个android开发者,你不会直接接触Linux内核层面的东西,但是你最好了解有这么一回事。

Native Libaraies(本地库)

Linux 内核的上一层就是Android的本地库了,这些库都是用 C 或者C++写的。他们为特定的硬件构架编译,并被手机供应商预装在手机中。
一些重要的库:

• Surface Manager 界面管理器

android使用了一种组合的窗口管理机制,你的程序绘图指令并不是直接作用在屏幕的缓冲上,而是先绘制为非显示位图,然后和屏幕上的其他位图结合,
最后显示给用户。这使得系统可以完成一些有趣的窗口变化。

• 2D 和 3D 绘图

• 音视频解码

Android可以播放视频,录制视频一些格式的视频,如ACC AVC MP3 MPEG-4

• SQL数据库

android本身包含一个轻量级的数据库:SQLite 。
火狐浏览器和苹果手机也是使用的这个数据库。
你的程序可以通过数据库将一些数据永久保存到手机中。

• 浏览器引擎

为了快速显示HTML描述的内容,android使用WebKit 库,同样使用这个库的还有谷歌浏览器,苹果的Safari 。

这些库本身并不是完整的应用程序,他们的作用是为上层的应用程序提供支持。如果你感兴趣,你可以用NDK来编写你自己的本地库。

Android Runtime 运行时

在Linux内核上面的还有Android Runtime,它包括一个特别的虚拟机Dalvik,以及java核心库。Dalvik是Google专门为android编写的一个虚拟机,你的应用程序在编译后

被转换为平台无关的字节码文件,然后,在程序运行时,Dalvik解释并执行这些字节码指令。尽管这个字节码的格式和一般java字节码格式不同,但是Dalvik实质还是一个java虚拟机。只不过它对内存的要求低一些。并且,android系统可以为多个程序同时运行多个虚拟机,他们之间是隔离的。

Dalvik与传统的java虚拟机有2个重要的不同之处:

1、Dalvik运行的是.dex后缀的文件。在编译期间,传统的.class 文件会被转化为.dex文件,.dex文件比传统的.class文件更加紧凑高效。这样做是考虑到手机等移动设备有限的

电量和内存。

2、android runtime 层中的java core library 和 传统的 JavaEE  javaME库都不是完全相同的。

Application Framework  应用程序框架

再上一层,就是应用程序框架了。这个层提供了高层次的开发模块。方便你用来开发应用程序。他们被预装到android系统中
下面手是一些重要的部分

• Activity Manager:
它控制着应用程序的生命周期,并维护着一个程序公用的回退栈。

• Content providers:
封装着应用程序之间共享的信息。比如联系人。

• Resource manager:
资源管理器,管理非代码部分。

• Location manager:
地区管理器:无论你的android手机在哪里,它都知道知己的所处地区环境。

• Notification manager:
消息管理器:用来通知一些消息事件,比如新的信息,闹钟,等等。

Application and Widget  应用程序和控件

Application 应用程序会占据整个屏幕来与用户交互,而Widget  (控件)则只占据一个小的矩形区域。

【译】Android系统架构的更多相关文章

  1. Android系统架构说明介绍

    Android系统架构说明介绍 Android系统架构和一些普遍的操作系统差不多,都是采用了分层的架构,从他们之间的架构图看,Android系统架构分为四个层,从高层到低层分别是应用程序层.应用程序框 ...

  2. Android进阶(十一)Android系统架构讲解

    如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越稳定的平台背后必有一个成熟的系统架构所支撑着.那么,Android的系统架构是怎么样的呢?从下图我们可以从整体上有个大致的了解(图片来源 ...

  3. Android进阶加密-第1章-Android系统架构-读书笔记

    第 1 章 Android 系统架构 1.1 Android 系统架构 Android 系统架构分为五层,从上到下依次是应用层.应用框架层.系统运行库层.硬件抽象层和 Linux 内核层. 应用层(S ...

  4. Android系统架构与系统源码目录

    前言 技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是<Android开发艺术探索>的姊妹篇.在这 ...

  5. Android源码分析一 Android系统架构

    一 Android系统架构 Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动.音频驱动.照相机驱动 ...

  6. 我收藏的技术知识图(每张都是大图)关于XX背后的知识、技术图,例如:Linux、Nginx架构、PHP知识卡、机会、HTML5移动、Android系统架构、YII架构的典型流程、Css知识表

    我收藏的技术知识图(每张都是大图) HTML5Linux/Unix系统设计思想读书笔记 LinuxMVCJava线程MVCSpring MVCCSS3Nginx架构VimCliCommandsPHP知 ...

  7. (转)android系统架构及源码目录结构

    转自:http://blog.csdn.net/finewind/article/details/46324507 1. Android系统架构: android系统架构采用了分层架构的思想,如下图所 ...

  8. Android系统架构(一)

    一.Android系统版本简介 Android操作系统已占据了手机操作系统的大半壁江山,截至本文写作时,Android操作系统系统版本及其详细信息,已发生了变化,具体信息见下表,当然也可以访问http ...

  9. Android 笔记之 Android 系统架构

    Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...

  10. Android零基础入门第2节:Android 系统架构和应用组件那些事

    原文:Android零基础入门第2节:Android 系统架构和应用组件那些事 继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android ...

随机推荐

  1. Beaglebone Black的启动

    Beaglebone Black的启动 第1章  准备开始 Beaglebone Black上最显眼的恐怕就是板子两侧的扩展端口,一侧有46个端口,共92个端口Beaglebone Black的启动. ...

  2. html和text的区别

    1.html <div id="divShow"><b><i>Write Less Do More</i></b>< ...

  3. 递推DP POJ 1163 The Triangle

    题目传送门 题意:找一条从顶部到底部的一条路径,往左下或右下走,使得经过的数字和最大. 分析:递推的经典题目,自底向上递推.当状态保存在a[n][j]时可省去dp数组,空间可优化. 代码1: /*** ...

  4. BZOJ4032 : [HEOI2015]最短不公共子串

    第一问: 对B串建立SAM,暴力枚举A的每个子串,在SAM上走,若失配则可行. 第二问: 设g[i][j]表示B串的第i个字符之后最早出现的字符j的位置,暴力枚举A的每个子串,按照g贪心地走,若失配则 ...

  5. HDU 4507 (鬼畜级别的数位DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题目大意:求指定范围内与7不沾边的所有数的平方和.结果要mod 10^9+7(鬼畜の元凶) 解题 ...

  6. Js作用域与作用域链详解

    一直对Js的作用域有点迷糊,今天偶然读到Javascript权威指南,立马被吸引住了,写的真不错.我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫. 一:函数作用 ...

  7. Graph database_neo4j 底层存储结构分析(6)

    3.6  Node 数据存储 neo4j 中, Node 的存储是由 NodeStore 和 ArrayPropertyStore 2中类型配合来完成的. node 的label 内容是存在Array ...

  8. VTK 6.3.0 Qt 5.4 MinGW 4.9.1 Configuration 配置

    Download VTK 6.3.0 Download Qt 5.4 with MinGW 4.9.1 Download CMake 3.2.0 I assume you've already ins ...

  9. 12.编写一个Java项目,定义包,在包下定义包含main方法的类,在main方法中声明8种基本数据类型的变量并赋值,练习数据类型转换。

    注意:float虽然是4个自减,但是它的取值范围却比8个字节的long要大. float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal, ...

  10. 关于isset使用产生Can't use function return value in write context错误

    在使用isset检测session的一个取值是否存在时,产生了这个问题 翻译一下:不能在填写的内容中使用函数的返回值.然后我查看了php手册看isset函数的使用:isset()只能用于变量,因为传递 ...