1.1 Android系统架构概括
应用部分:Android设备上运行的所有应用,面向用户。
核心部分:Android中核心功能实现
底层部分:Android寄宿的Linux操作系统及相关驱动
1.1.1 应用层
包括系统应用和第三方应用
基于JAVA语言来开发,也可以使用C/C++来实现底层模块,并添加JNI(Java Native Interface)接口与上层JAVA实现进行交互,然后利用Android提供的交叉编译工具生成类库并添加到应用中。
NDK(Native Development Kit),由C/C++的一些接口构成,可以通过它更高效地调用特定的系统功能。
1.1.2 框架层
由多个系统服务(System Service)共同组成
所有服务寄宿在系统核心进程(System Core Process)
运行时,每个服务都占据一个独立的线程,彼此通过进程间的通信机制(Inter-Process Communication,IPC)发送消息和传输数据。
Android应用的最大特征是基于组件的设计方式。每个应用都有若干个组件构成,组件和组件之间并不会建立通信信道,而是通过框架层的系统服 务,集中地调度和传递信息。
1.1.3 运行时
Android的运行时由JAVA核心类库和JAVA虚拟机Dalvik共同构成。
Dalvik是为Android量身打造的JAVA虚拟机,负责动态解析执行应用,分配空间,管理对象生命周期。是采取基于寄存器的虚拟机架构设 计。
Dalvik用新的二进制码格式文件.dex作为其一次编译的中间文件。
在Android应用的编译过程中,它会先生成若干个.class文件,然后统一转换成一个.dex文件。
1.1.4 核心类库
核心类库由一系列的二进制动态库共同构成,通常使用C/C++进行开发。核心类库不能够独立运行于线程中,而需要被系统服务加载到其进程空间里, 通过类库提供的JNI接口进行调用。
核心类库来源:系统原生类库,第三方类库。
1.1.5 硬件抽象层和Linux内核
狭义的Android系统,主要指的是Linux内核以上的各层,从运行的角度来看,它们只是运行在Linux系统上的一些进程,并不是完整的系 统。
Linux之于Android最打的价值,便是其强大的可移植性。Linux将Android的上层实现与底层硬件连接起来,使它们可以不必直接 耦合,也降低了移植的难度。
硬件抽象层(Hardware Abstract Layer,HAL),是Android为厂商定义的一套接口标准,它为框架层提供接口支持,厂商需要根据定义的接口实现相应功能。
1.2 Android的核心功能
1.2.1 界面框架
Android的每个交互假面都由一棵控件树组成。
控件树中的控件派生自View类,而其中非字节点的控件都派生自ViewGroup类
控件树中的控件都受其父控件的管理,父控件会负责子空间的丈量和绘制,并向子控件分发交互事件。
为了获取用户与空间的交互事件(UI Events),可以为控件添加各种交互事件监听对象(Event Listener),它的设计采用了观察者模式。
布局空间,是一种自容器空间,其主要任务是按不同的方式排列其中的子控件
Android的应用资源目录由资源目录,XML资源文件和数据资源文件共同构成。
1.2.2 数据存储
Android中每个应用的配置信息和数据库文件等数据,都是私有的,保证了应用数据的安全性.
共享数据给其他应用:构造一个数据源组件(Content Provider);将数据放入扩展存储设备
1.2.3 网络通信
Android中,系统会负责底层网络的连接和管理,开发者可以直接通过HTTP或Socket与远端服务器建立连接。
Android不仅坚持点到端的连接,同样支持点到点的蓝牙连接,NFC连接等。
1.2.4地理信息
可以基于GPS定位
通过网络利用基站信息进行定位
1.2.5 图形和多媒体处理
音频处理依托于OpenCORE。
图像处理,通过Skia。
每个Android进程仅有16MB的堆空间,一不小心内存溢出,整个应用不可避免就会崩溃。
1.2.6 外部设备
Android支持各种类型的噶感应器。
强大的语音识别服务。
1.2.7 特色功能模块
Android有统一的帐号管理系统。
Android还有全局的事件通知机制。
应用搜索框架
桌面小工具(App Widget)
1.3 Android的架构特征和设计思想
Android考虑了设备的兼容性,增强了应用之间的功能复用,优化了对网络服务的支持,简化了应用开发的难度。
1.3.1 平台开放性
兼容性。如:基于资源目录的应用资源体系。开发者可以针对不同的设备环境,分别定制描述同一界面对象的资源文件,然后分别放入待定的资源目录 中,Android资源在运行时寻找最符合当前设备环境的资源文件,从而提供最合适的用户体验。
1.3.2 基于组件的应用设计
Android的应用是高度组件化的。
各个Andoid应用,只有明确的组件边界,而不再有明确的进程边界和应用边界。
组件化的设计思想,衍生出了很多相关的设计,比如基于意图(Intent)的通信模式,进程托管,组件的生命周期。
1.3.3 基于网络服务的平台