
1.3 原理学习:Android系统架构和开发框架
1.3.1 Android系统架构
Android系统架构如图1.2所示

图1.2 Android系统架构
Android系统架构和其操作系统架构一样,都采用了分层架构。Android系统架构共分四层,分别是应用程序层、应用框架层、系统库及运行时层和Linux内核层。
(1)应用程序层:该层提供核心应用程序包,如首页、联系人、电话和浏览器等,开发者可以设计和编写相应的应用程序。
(2)应用框架层:该层是Android应用开发的基础,包括活动管理器、窗口管理器、内容提供器、视图系统、通知管理器、安装包管理器、电话管理器、资源管理器、位置管理器和XMPP服务。
(3)系统库及运行时层。系统库中的库文件主要包括图层管理、媒体库、SQLite、OpenGL ES、自由类型、WebKit、SGL、SSL和libc;运行时包括核心库和Dalvik虚拟机。核心库不仅兼容大多数Java所需要的功能函数,还包括Android的核心库,如android.os、android.net、android.media等;Dalvik虚拟机是一种基于寄存器的Java虚拟机,主要完成对生命周期、堆栈、线程、安全和异常的管理,以及垃圾回收等功能。
(4)Linux内核层。Linux内核层提供各种硬件驱动,如显示驱动、摄像头驱动、蓝牙驱动、键盘驱动、Wi-Fi驱动、音频驱动、Flash驱动、绑定驱动、USB驱动、电源管理等。
1.3.2 Android应用开发框架
Android应用开发包含基本的应用功能开发、数据存储和网络访问三大模块。
1. 基本的应用功能开发
1)Android应用程序的组成
Android应用程序一般由Activity、Broadcast Receiver、Service、ContentProvider组成。
(1)Activity。Activity是最基本的模块。Android应用程序往往包含多个Activity实例。一个Activity实例就是手机上的一屏,相当于一个网页,每个Activity实例运行结束后都有一个返回值。Android应用程序会记录从首页到其他界面的跳转记录,并将以前的Activity实例压入系统堆栈。用户可以通过编程的方式删除堆栈中的Activity实例。
Activity主要用于关联界面资源文件(“res/layout”目录下的XML资源,也可以不包含界面资源),其内部包含控件的显示设计、界面交互设计、事件的响应设计,以及数据处理设计、导航设计等。
(2)BroadcastReceiver。BroadcastReceiver提供了在Android应用程序进程间进行通信的机制,例如,当来电时,可以通过BroadcastReceiver广播消息。对用户而言,BroadcastReceiver是不透明的,用户无法看到事件,BroadcastReceiver通过NotificationManager来通知用户事件发生了。BroadcastReceiver既可以在资源AndroidManifest.xml中注册,也可以在代码中通过Context.registerReceiver()函数进行注册,只要注册了,当事件来临时,即使应用程序没有启动,系统也在需要的时候自动启动应用程序。另外,应用程序可以很方便地通过Context.sendBroadcast()将自己的事件广播给其他应用程序。
(3)Service。Service主要用于在后台处理一些耗时的逻辑,或者执行某些需要长期运行的任务,甚至可以在应用程序退出的情况下,让Service在后台继续保持运行状态。Service拥有生命周期方法,可以监控服务状态的变化,以便在合适的阶段执行工作。
(4)ContentProvider。ContentProvider提供了在应用程序之间进行数据交换的机制。应用程序可以通过实现一个ContentProvider的抽象接口将自己的数据暴露出去,并隐蔽具体的数据存储实现。ContentProvider提供了基本的CRUD(Create、Read、Update、Delete)接口,并实现了权限机制,从而可以保护数据交互的安全性。
2)Android应用程序的项目文件
一个标准的Android应用程序的项目文件包含以下几个部分:
(1)src目录:该目录用于保存Java代码部分(包含Activity)。
(2)R.java文件:这个文件是由Eclipse自动生成与维护的,用户不需要修改,该文件提供了Android应用程序资源的全局索引。
(3)Android Libraries目录:该目录用于保存运行应用程序的Android库。
(4)assets目录:该目录用于保存多媒体等文件。
(5)res目录:该目录用于保存资源文件,和VC中的资源目录类似。该目录中的drawable保存的是图片文件,layout保存的是布局文件,values保存的是strings.xml(字符串)、colors.xml(颜色)和arrays.xml(数组)资源。
(6)AndroidManifest.xml:这个文件非常重要,是整个应用程序的配置文件。在这个文件中,需要声明所有要用到的Activity、Service、Receiver等。
2. 数据存储
Android的数据存储方式包括SharedPreferences、文件存储、SQLite数据库存储、内容提供器(ContentProvider)以及网络存储,具体如下:
(1)SharedPreferences。SharedPreferences是由Android提供的一种最简单的数据存储方式,默认存在应用程序项目文件的“data/<package name>/shared_prefs”中,通过getSharedPreferences函数可获取SharedPreferences对象并进行读写操作。
(2)文件存储。通过openFileInput、openFileOutput等系统提供的API可以进行数据的读写访问。特别需要注意的是,在Android中,应用程序的数据是私有的,也就是说,其他应用程序无法访问当前应用程序所产生的文件。
(3)SQLite数据库存储。SQLite数据库存储是通过继承SQLiteOpenHelper类并获取此类的应用程序级别的实例来进行数据库操作的。SQLiteOpenHelper类中提供了默认的CRUD接口,便于对应用程序进行数据存储操作。
(4)ContentProvider。ContentProvider是通过调用其他应用程序的数据接口来实现数据存储的。
(5)网络存储。网络存储是通过网络访问服务接口(如WebService数据访问接口)来实现数据存储的。
3. 网络访问
网络访问主要是对HTTP访问技术的封装,并通过java.net.*以及Android.net.*提供的HttpPost、DefaultHttpClient、HttpResponse等类提供的访问接口来实现Web服务访问。