笔者iOS程序猿一枚,和大多数攻城狮一样,在某一语言或某一领域做了一段时间后会出现技术增长的瓶颈,在这个深度发展受阻的时候,不妨以广度发展作为新的切入口,在不同语言的类比之后融汇贯通,可能会有新的感悟,以下笔者会以自己的学习轨迹为线索,分阶段分享学习Android的收获与感悟。
万语千言,就先从Android的前世今生说起吧!

Android 的来历

| |Android由Android公司创造,后被Google收购。|
|: ------ : | :-----------------------------------------------------------------------|
| 2007.11 | Google发布Android 1.0 手机操作系统,市场反应冷淡。|
| 2008.9 | 第一部Android手机在纽约发布,Android操作系统逐渐为手机厂商认可。|
| 2009.9 | Google发布Android1.5,提供了蓝牙支持,大受开发者欢迎。|
| 2010.1 | Google在美国总部发布首款合作品牌手机Nexus One.

Android 的框架结构

Android系统的底层建立在Linux系统之上,该平台由 操作系统中间件用户界面应用软件 4层组成,它采用一种软件叠层(Software Stack)的方式进行构建。其使层与层之间相互分离,明确各层分工分。这种分工方式保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层应用程序无需任何改变。
无图无真相

Android系统结构层图.png

从上图我们可以看出,Android操作系统的体系结构可分为4层,由上到下依次是应用程序、应用程序框架、核心类库和Linux内核,其中第三层还包括Android运行时的环境。下面分别来讲解各个部分。

1. 应用程序层

Android 连同一个核心应用程序包一起发布,该应用程序包包括E-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。所有的应用程序都是用Java编写的。

2. 应用程序框架

开发者完全可以访问核心应用程序所使用的API框架。该应用程序框架架构用来简化组件软件的重用,任何一个应用程序都可以发布它的功能块并且任何其他的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。

以下所有的应用程序都由一系列的服务和系统组成,包括:

| 应用 |功能|
|------ : | :-----------------------------------------------------------------------|
| 一个可扩展的视图(Views| 可以用来创建应用程序,包括列表(lists)、网络(grids)、文本框(text boxes)、按钮(buttons),甚至是一个可嵌入的Web浏览器。|
| 内容管理器(Content Providers | 使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。|
| ** 一个资源管理器(Resource Manager)** | 提供非代码资源的访问,如本地字符串、图形和分层文件(layout files)。|
| 一个通知管理器(Notification Manager | 使得应用程序可以在状态栏中显示客户通知信息。|
| ** 一个活动类管理器(Activity Manager)** | 用来管理应用程序生命周期并提供常用的导航回退功能。|

3. Android函数库

Android包括一个被Android系统中各种不同组件所使用的C/C++集库。该库通过Android应用程序框架为开发者提供服务。

以下是一些主要的核心库:

核心库 功能
系统C库 一个从BSD继承来的标准C系统函数库(libc),专门为基于Embedded Linux的设备定制。
媒体库 基于PacketVideo OpenCORE;该库支持录放,并且可以录制许多流行的音频视频格式,还有静态映像文件包括MPEG4、H.264、MP3、AAC、JPG、PNG。
SurfaceManager 对显示子系统的管理,并且为多个应用程序提供2D和3D图层的无缝融合。
LibWebCore 一个最新的Web浏览器引擎,用来支持Android浏览器和一个可嵌入的Web视图。
SGL 一个内置的2D图形引擎。
3D libraries 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。
FreeType 位图(bitmap)和向量(vector)字体显示。
SQLite 一个对于所以应用程序可用、功能强劲的轻型关系型数据库引擎。

4. Android运行库

Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。

每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik是针对同时高效地运行多个VMs实现的。Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都是经由Java汇编器编译,然后通过SDK中的DX工具转化成.dex格式由虚拟机执行。

Dalvik虚拟机依赖于Linux的一些功能,比如线程机制和底层内存管理机制。

5. Linux内核

Android的核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的硬件抽象层。

更多相关文章

  1. Android(安卓)Auto
  2. android ndk 开发之 在 应用程序中使用 jni
  3. 谷歌升级手机Android商城 趋向社交网络应用
  4. Android体系结构
  5. Android(安卓)的网络编程
  6. Android(安卓)1.5和Android(安卓)1.6等各版本API的区别
  7. Android系统结构
  8. Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程
  9. 深入探讨 Android(安卓)传感器

随机推荐

  1. 动手学Android之一——为什么要学Android
  2. 提高打开Android本地文档的速度
  3. 在 Android 中调用二进制可执行程序(nativ
  4. Android中一张图片占用的内存大小
  5. [置顶] android浮动搜索框的使用
  6. 【Android适配问题集锦-音频类】当Androi
  7. Android插件开发初探——基础篇
  8. Android中Textview和图片同行显示(文字超
  9. 【Android】说做就做:带图标的list item
  10. 侧边栏(使用Support Library 4提供的扩展