基于android平台的即时通信系统实现(3)

第一层是最底下的Linux内核层[8],安卓平台操作系统的底层使用的就是Linux内核,Linux层提供底层的基础功能,提供内存管理、进程管理和驱动程序等功能,


第一层是最底下的Linux内核层[8],安卓平台操作系统的底层使用的就是Linux内核,Linux层提供底层的基础功能,提供内存管理、进程管理和驱动程序等功能,驱动程序又包括声音、摄像头、Wifi等驱动,通过这些驱动程序来让我们的外设工作起来。

第二层是由Libraries函数库和Android运行时组成的中间件层[9],系统的函数库是整个app应用程序框架的支撑[10],应用程序开发人员可以通过框架调用这些函数库,比如我们常用的SQLite,一种轻量级的关系数据库引擎。Android运行时包括核心库和Dalvik虚拟机,前者既提供了Java语言基本的函数功能[11],也提供了安卓的核心库,也就是安卓系统特有的函数功能[12]。后者Dalvik是基于寄存器设计的Java虚拟机,经过优化的多实例虚拟机,实现对生命周期的管理、线程的管理以及安全和异常的管理等主要功能。

第三层是应用程序框架层,该层作为安卓应用开发的基础,提供了Android平台基本的组件重用机制和管理功能,包括内容提供者、View系统、Activity活动、资源、电话、通知消息、位置管理器等[13]。正因为这些管理器的存在,开发者可以让自己的程序实现跨进程的数据访问,运行后台服务,访问设备的位置信息,向状态栏发送指定信息等等。程序员只要善用API框架,就可以快速地编制功能丰富且新颖的应用程序,当然应用也可以发布自己的功能模块,并且其他应用程序也能使用这些功能,这是因为应用程序的体系结构的目的是简化组件的重用。

第四层是应用程序层,提供了一系列的核心应用程序,包括浏览器、日历、相册等常用的程序[14]。我们开发的Application也是处于这一层,开发丰富的应用程序,可以让用户使用更多便利的功能。

2.1.2安卓的四大组件

Android不像Java应用程序,它里面没有Main方法,它是通过一系列组件构成的应用程序[15]。安卓平台下一共有四种常用的组件:Activity(活动)、Service(服务)、ContentProvider(内容提供者)、BroadcastReceiver(广播接收器)。

Activity,活动,其实就是我们所看到的程序的界面,可以接收与用户交互产生的界面事件。一个安卓应用程序可以由一个或多个Activity构成,Activity之间又可以通过Intent(安卓里的一种消息传递机制)进行通信。Activity一般表现为四种状态:非活动状态、活动状态、暂停状态和停止状态。

图2-2安卓体系结构

安卓的Activity的四种状态如图2-2所示,当应用程序启动,Activity就处于活动状态,这个时候可以与用户进行交互。当它在界面上被部分遮挡时,例如被一个Dialog对话框遮挡的时候,该Activity不再处于界面最上层,而且无法与用户进行交互,这时就处在暂停状态,不过它依然可见,因为这个Activity还与窗口管理器保持连接,系统继续维护它的内部状态。当被另一个Activity完全覆盖时,用户也已经完全看不见这个Activity,则意味着它出于停止状态。非活动状态就是当Activity不处于其他三种状态的时候。

Service,安卓系统提供的服务组件,服务是没有用户界面的,适合在后台长期运行。例如在音乐播放器中,退出界面后音乐依旧在播放,这里就需要用到Service来进行控制。为了解决不同安卓应用程序进程间的通信问题,可以使用Service实现进程间通信(IPC,InterProcessCommunication)。服务不可以自己运行,需要通过其他组件来启动,但是停止的过程可以由自身或其他组件完成。

ContentProvider,数据提供者,是一种应用程序之间共享数据的接口机制,许多安卓系统内置的数据都是通过数据提供者给用户使用的,例如想要读取系统通讯录中的联系人,就需要用到通讯录程序的ContentProvider组件。有一点需要注意的是,开发者不能直接调用ContentProvider的接口函数,而是需要通过ContentResolver(内容解析者)来间接调用,其他应用程序可以通过ContentResolver从该内容提供者中获取数据,对数据进行增删改查。