第四章Android开发框架本章主要内容♦Android系统架构♦Android应用程序组成♦Activity生命周期♦Android项目架构♦AndroidManifest.xml文件解析♦XML简介♦Android生命周期Android系统架构Android系统架构与其它操作系统一样,Android的系统架构采用了分层结构。Android分为四层,从高到低分别是应用程序层、应用程序框架层、系统运行库层(包含系统库和Android运行库)和linux核心层。Android从本质上来讲是一套软件堆叠(SoftwareStack),主要分为三层:即操作系统、中间件和应用程序。其中,Android的中间件可以再细分出两层,底层是函数库(Library)和虚拟机(VirtualMachine;VM),上层为应用程序框架(ApplicationFramework)。上面架构图中蓝色部分(包括上两大层和AndroidRuntime中的CoreLibraries)使用Java语言开发,绿色部分(LIBRAIES)使用C/C++开发,红色部分(LinuxKernel)使用C开发,黄色部分为DalvikVM。Android系统架构1、应用程序层(Applications)Android会同一系列核心应用程序包一起发布,主要包括拨号程序、email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的这些应用程序都是使用JAVA语言编写的。2、应用程序框架层(ApplicationFramework)对于Android系统,开发人员可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能模块(需要遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。Android系统架构支撑应用程序正常运行的是一系列的服务,其中包括:1.ViewsSystem:丰富且可扩展的视图(Views),用于构建应用程序,包括列表(lists),网格(grids),文本框(textboxes),按钮(buttons),甚至是可嵌入的web浏览器。2.ContentProviders(内容提供器):使得应用程序可以访问由另一个应用程序所维护的数据(如联系人数据库),或者共享它们自己的数据。3.ResourceManager(资源管理器):提供非代码资源的访问,如本地字符串,图形,和布局文件(layoutfiles)4.NotificationManager(通知管理器):使应用程序可以在系统状态栏中显示提示信息。通知区域设定在手机的顶部,例如未读短信邮件、未接电话等通知消息都会在此区域显示。5.ActivityManager(Activity管理):用于管理应用程序各Activity的生命周期并提供常用的导航回退功能。Android系统架构3、函数库层(Libraries)Android包含了一些基础的C/C++库,它们能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。以下是一些核心库1.SystemClibrary:一个从BSD继承来的标准C系统函数库(libc),它是专门为基于embeddedlinux的设备定制的。2.MediaLibraries:基于PacketVideoOpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG等等。3.SurfaceManager:提供对显示子系统的管理,并且为应用程序提供了2D和3D图层的无缝融合。Android系统架构4.LibWebCore:一个最新的web浏览器引擎,支持Android浏览器及可嵌入应用程序的web视图。5.SGL:底层的2D图形引擎。6.3DLibraries:基于OpenGLES1.0APIs实现;该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。7.FreeType:位图(bitmap)和矢量(vector)字体显示。8.SQLite:SQLite是一套开放源码的关系数据库,是一种对于所有应用程序可用并且功能强劲的轻型关系型数据库引擎。9.SSL:SecureSocketLayer用于保护网页通讯安全的协议。Android系统架构4、Android运行时环境(AndroidRuntime)Android虽然使用Java程序语言来开发应用程序,但是却不是使用原有的J2ME版本来执行Java程序,而是采用Android自有的AndroidRuntime来执行。AndroidRuntime由下面两个核心部分组成。CoreLibraries即核心库,该核心库实现了JAVA编程语言核心库的大多数功能。DalvikVirtualMachineAndroid系统架构4、内核层(LinuxKernel)Android平台的系统内核是Linux2.6,其包含的主要功能有安全(Security)、内存管理(MemoryManagement)、进程管理(ProcessManagemen)、网络协议栈(NetworkStack)、硬件驱动(DriverModel)等,Linux内核同时也作为硬件和软件栈之间的抽象层。Android应用程序组成Android应用程序组成一个常规的Android程序主要由Activity、BroadcastReceiver、Service、ContentProvider四个部分组成。但是并不是所有的Android应用程序都必须包含这4个部分Android应用程序组成ActivityAndroid中最普通的模块之一,也是开发者最常遇到的模块之一。在Android程序中,一个Activity就相当于手机屏幕的一页显示,类似于浏览器的一个网页。通常在Activity中添加一些UI组件,并对这些组件实现相应的事件处理。在一个Android应用程序中,可能涉及多个Activity,并在这几个Activity中进行跳转。打开一个新的Activity时会将当前的Activity置为暂停状态并压入堆栈,,Android默认会把每个应用从开始到当前的每个Activity都保存到堆栈中,也可以通过设定使一些无需保留的Activity不压入堆栈。Android应用程序组成BroadcastReceiver可以翻译为“广播接收器”,它用于对Android系统广播的事件进行接收以方便做出所需的处理,例如有电话拨打进来时,由于Phone这个应用程序注册了与这个事件相关的BroadcastReceiver,它就将对这个事件进行处理。需要注意的是BroadcastReceiver本身并不会生成UI,即对于用户这个接收事件是不可见的,BroadcastReceiver通过NotificationManager来通知用户。BroadcastReceiver可以在AndroidManifest.xml中注册,也可以在代码中通过Context.registerReceiver()进行动态注册。一旦某个应用程序注册了BroadcastReceiver,那么即使程序并没有启动,当这个BroadcastReceiver所响应的事件发生时,系统也会根据需要启动该应用程序。Android应用程序组成Service使用过智能手机的读者可以发现,使用音乐播放器播放音乐时,可以切换至其他的应用程序,音乐会在后台继续播放。这就是Service在后台对音乐播放进行控制,当点击了播放器上的停止按钮时,播放音乐的Service也就停止了。Service没有用户界面,是一种可以运行很长时间的程序。可以简单地将Service理解为没有用户界面的Activity。Service可以通过两种方式启动,即startService(Intentservice)和Context.bindService(),在第5章中会对Service进行详细的介绍。Android应用程序组成ContentProvider在Android中,无论是文件数据还是数据库数据,这些数据都是私有的,默认不对其他应用程序开放的。那么如何在两个应用程序之间交换数据呢?这时就需要ContentProvider。可以将ContentProvider理解为数据操作类。在该类中,Android实现了一组标准的方法接口,通过这些接口,应用程序就可以读取或者保存这个类提供的各种类型的数据了。常见的接口query(Uri,String[],String,String[],String),该方法通过关键字查询数据;insert(Uri,ContentValues),该方法的作用是将一条数据插入到指定位置;update(Uri,ContentValues,String,String[]),更新数据;delete(Uri,String,String[]),删除数据。Activity生命周期在应用程序中每一个Activity都拥有自己的生命周期,这个生命周期由系统来实现统一的管理。一个Activity有三个基本的状态:当其在前台运行时(即在Activity当前任务的堆栈顶),即为活动状态(运行状态)。这时Activity会响应用户的操作。当Activity失去焦点但是对用户仍然可见时为paused暂停状态。此时,其他的Activity存在于自己之上,这种情况可能是透明或者被非全部覆盖(如非全屏的对话框)。所以其中一些处于暂停状态的Activity也可以被显示。一个暂停的Activity仍然是处于活动状态的(它维护着所有的状态保存信息,并且依然附着在窗口管理器)。如果一个Activity完全被另一个Activity所掩盖,那它的状态会变为stopped。此时仍然保存着状态信息。当其他应用程序需要使用更多的内存时,系统有可能会杀死处于paused状态或stopped状态的Activity(系统会在杀死Activity之前对状态进行保存)。当其再次需要显示时,系统会重新运行该Activity并且加载所保存的状态信息。Activity生命周期如图所示是描述Activity生命周期的框图Activity生命周期Activity生命周期,包括了三个主要的循环结构,由大至小分别如下,其中每一个较小的循环都是较大循环的子集。完整的Activity生命周期。这个周期循环从该Activity的onCreate()方法第一次被调用开始,直到onDestroy()方法被调用结束。在onCreate()方法中,Activity会对所有的全局状态进行初始化,并在onDestroy()方法中释放所有资源。Activity的可见生命周期。这个周期从onStart()方法被调用时开始,直到onStop()方法被调用时结束,在这个周期中Activity对于用户是可见的,但是也有可能不处于Activity栈的最上方即不是可交互的。在这个周期中可以获取资源并对UI进行更新。Activity前台生命周期。在这个周期中Activity始终处于栈的顶端并且可以与用户交互。周期从onResume()方法被调用时开始直到onPause()方法被调用时结束,对于一个Activity来说这两个方法是十分频繁的会被调用到的,例如当Android进入休眠状态或者该Activity调用了新的Activity。Android项目架构1.src:存放java源代码。2.gen:编译器自动生成的java代码,这个目录下的文件是由系统维护的。3.assets:这个目录下的文件会被打包到Android应用程序安装包(.apk)中。4.res:资源文件目录,添加到这个目录下的文件都会在gen下的R.java文件中与一个整形常量相关联;如果在res下存放的资源在应用中没有被使用,在打包的时候就不会将这部分资源打包,这样可以减小安装文件的大小。5