Android系统结构
Android架构分为3部分:应用部分(Android设备上运行的程序)、核心部分(Android系统的核心实现:应用框架、核心类库)、底层部分(Linux系统及相关驱动)。
从实际的架构模型分:
应用层、框架层、运行时、核心类库、硬件抽象层、Linux内核
在Android开发中,开发者使用C/C++开发底层服务,并添加JNI接口与上层Java实现交互。利用Android的交互编译工具生成类库、添加到应用中。
让了让开发者绕过框架层,Android提供NDK(Native Development kit),由C/C++接口构成。
框架层服务有:组件管理、窗口管理、地理信息服务、电源管理、通话管理……所有服务寄宿在系统核心进程,在运行时,每个服务单独占用一个线程。通过进程通信机制IPC发送消息和传输数据。
Android的运行时由Java核心类库和java虚拟机Dalvik。Dalvik负责动态执行应用,分配空间,管理对象生命周期。
Dalvik没有使用传统的二进制码,而是使用新的二进制.dex:先生成.class,在生成.dex。在转换过程中,会对部分.class文件进行指令转义,利用Dalvik的OpCodes指令集替换,提高执行效率(代码混淆)。
因此.dex比.class文件小。
Android界面框架中最有特色的是资源和布局,通过控件库和接口设计,开发者可以快速搭建界面。
每个交互界面都有控件树构成。控件都派生自View。非子节点控件派生自ViewGroup。
最有特色的控件:布局控件。
Android数据存储的最大特点是数据的私有化,数据共享通过数据源组件Content Provider实现。数据放入SD卡则可以被所有应用使用。
开发者通过Http或者Socket与网络通讯。支持点到端的连接及点到点的蓝牙连接(借助开源项目BlueZ)。内嵌了浏览器组件WebKit。
地理位置信息不但可以给予GPS定位,还可以根据基站信息定位。基站信息定位比GPS定位准确度低,但灵活适应能力强,低碳环保。
Android支持主流的音视频,主要借助于开源项目OpenCORE。基于C/C++实现的音视频库,放于Android的核心类库中。图像处理基于开源项目Skia。
Android特色功能模块有:统一的账号管理系统、全局的时间通知机制Notification(当应用需要将消息即时推送给用户时,可以使用android.app.NotificationManager对象,将消息发送到系统的状态栏中,并利用声音、震动、图标等方式提醒用户)。
Android的架构特征和设计思想:不同于塞班的提升性能角度出发,Android基于当前环境,考虑了设备的兼容性,增强了应用间的功能复用,优化了网络服务,简化了开发难度。
平台开放性:最大的挑战是兼容,兼容不同的硬件设备、屏幕大小、外设、语言环境等。Android底层架设在Linux上,Linux可移植性强,保证了Android在不同硬件上运行。在上层,Android为应用提供了增强兼容的机制。
基于组件的设计:组件通过配置文件描述,在Android中有明确的组件边界,弱化了进程边界和应用边界。
基于网络服务的平台:无缝支持各类移动网络,内嵌浏览器组件。