您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > android程序基本构成(基础篇).
Android应用程序的基本构成•我们的资源在哪里•资源的类别•资源的基本使用方法•活动(Activity)组件•服务(Service)组件•广播接收者(Broadcastreceivers)•内容提供者(Contentproviders)•AndroidManifest.xml文件的结构资源的存放•任何类型的程序都需要使用资源(例如:文件、XML、数据库等),Android应用程序也不例外。Android应用程序使用的资源有很多都被封装在apk文件中,并随apk文件一起发布。•这个文件我们上次的课中,已经生成了。位置放在工作目录中的BIN目录下。•既然要将资源封装在apk文件中,那么这些资源一定是放在Eclipse工程的某处。在上节课实现的应用程序中可以看到,在Eclipse工程中有一个res目录。在该目录下有3个子目录:drawable、layout、values。•这3个子目录中分别包含icons.png、main.xml和strings.xml。•从drawable目录中包含icons.png文件这一点可以初步断定,这个目录是用来保存图像文件的。•layout目录从名字可以看出,该目录是用来保存布局文件的。•通过打开values目录中的strings.xml文件可以看出,在strings.xml文件中都是基于XML格式的key-value对,因此,也可以断定values目录是用来保存字符串资源的。资源类别•Android支持3种类型的资源:XML文件、图像以及任意类型的资源(例如,音频、视频文件)。这些资源文件分别放在res目录的不同子目录中。在编译Android应用程序的同时,系统会使用一个资源文件编译程序(aapt)对这些资源文件进行编译。Android支持的资源列表目录资源类型描述res\animXML该目录用于存放帧(frame)动画或补间(tweened)动画文件res\drawable图像该目录中的文件可以是多种格式的图像文件,例如,bmp、png、gif、jpg等。该目录中的图像不需要分辨率非常高,aapt工具会优化这个目录中的图像文件。如果想按字流读取该目录下的图像文件,需要将图像文件放在res\raw目录中res\layoutXML该目录用于存放XML布局文件res\valuesXML该目录中的XML文件与其他目录的XML文件不同。系统使用该目录中XML文件的内容作为资源,而不是XML文件本身。在这些XML文件中定义了各种类型的key-value对。在该目录中可以建立任意多个XML文件,文件可以任意命名。在该目录的XML文件中还可以根据不同的标签定义不同类型的key-value对。例如,通过string标签定义字符串key-value对,通过color标签定义表示颜色值的key-value对,通过dimen标签定义距离、位置、大小等数值的key-value对res\xmlXML在该目录中的文件可以是任意类型的XML文件,这些XML文件可以在运行时被读取res\raw任意类型在该目录中的文件虽然也会被封装在apk文件中,但不会被编译。在该目录中可以放置任意类型的文件,例如,各种类型的文档、音频、视频文件等在表中所示的目录中放入资源文件后,ADT会在gen目录中建立一个R.java文件,该文件中有一个R类,该类为每一个资源定义了唯一的ID,通过这个ID可以引用这些资源。资源的基本使用方法•Android会为每一种资源在R类中生成一个唯一的ID,这个ID是int类型的值。在一般情况下,开发人员并不需要管这个类,更不需要修改这个类,只需要直接使用R类中的ID即可。为了更好地理解使用资源的过程,先看一下在上一节课的例子中生成的R类的源代码。•从R类中很容易看出,ADT为res目录中每一个子目录或标签(例如,string标签)都生成了一个静态的子类,不仅如此,还为XML布局文件中的每一个指定id属性的组件生成了唯一的ID,并封装在id子类中。这就意味着在Android应用程序中可以通过ID使用这些组件。•R类虽然也属于com.cstp.android包,但在Eclipse工程中为了将R类与其他的Java类区分开,将R类放在gen目录中。•既可以在程序中引用资源,也可以在XML文件中引用资源。例如,在应用程序中获得btnShowDate按钮对象的代码如下:•ButtonbtnShowDate=(Button)findViewById(R.id.btnShowDate);•可以看到,在使用资源时直接引用了R.id.btnShowDate这个ID值,当然,直接使用0x7f050000也可以,不过为了使程序更容易维护,一般会直接使用在R的内嵌类中定义的变量名。•AndroidSDK中的很多方法都支持直接使用ID值来引用资源。例如,android.app.Activity类的setTitle方法除了支持以字符串方式设置Activity的标题外,还支持以字符串资源ID的方式设置Activity的标签。例如,下面的代码使用字符串资源重新设置了Activity的标题。•setTitle(R.string.hello);•除了可以使用Java代码来访问资源外,在XML文件中也可以使用这些资源。例如,引用图像资源可以使用如下格式:•@drawable/icon•其中icon就是res\drawable目录中的一个图像文件的文件名。这个图像文件可以是任何Android支持的图像类型,例如,gif、jpg等。因此,在drawable目录中不能存在同名的图像文件,例如,icon.gif和icon.jpg不能同时放在drawable目录中,这是因为在生成资源ID时并没有考虑文件的扩展名,所以会在同一个类中生成两个同名的变量,从而造成Java编译器无法成功编译R.java文件。什么是Activity•Android应用程序中最令人振奋的特性是可以利用其他Android应用程序中的资源(当然,需要这些应用程序进行授权)。例如,如果应用程序恰好需要一个显示图像列表的功能,而另一个应用程序正好有这个功能,只需要调用这个应用程序中的图像列表功能即可。在这一点,比iphone的应用要灵活很多。•在Android程序中没有入口点(即Main函数),取而代之的是一系列的组件,这些组件都可以单独实例化。本节课将介绍Android支持的4种组件的基本概念。应用程序向外共享功能一般也是通过这4种应用程序组件实现的。活动(Activity)组件•Activity是Android的核心类,该类的全名是android.app.Activity。Activity相当于C/S程序中的窗体(Form)或Web程序的页面。每一个Activity提供了一个可视化的区域。在这个区域可以放置各种Android组件,例如,按钮、图像、文本框等。•在Activity类中有一个onCreate事件方法,一般在该方法中对Activity进行初始化。通过setContentView方法可以设置在Activity上显示的视图组件,setContentView方法的参数一般为XML布局文件的资源ID。•一个带界面的Android应用程序可以由一个或多个Activity组成。至于这些Activity如何工作,或者它们之间有什么依赖关系,则完全取决于应用程序的业务逻辑。例如,一种典型的设计方案是使用一个Activity作为主Activity(相当于主窗体,程序启动时会首先启动这个Activity)。在这个Activity中通过菜单、按钮等方式启动其他的Activity。在Android自带的程序中有很多都是这种类型的。•每一个Activity都会有一个窗口,在默认情况下,这个窗口是充满整个屏幕的,也可以将窗口变得比手机屏幕小,或者悬浮在其他的窗口上面。•Activity窗口中的可视化组件由View及其子类组成,这些组件按着XML布局文件中指定的位置在窗口上进行摆放。服务(Service)组件•服务没有可视化接口,但可以在后台运行。例如,当用户进行其他操作时,可以利用服务在后台播放音乐,或者当来电时,可以利用服务同时进行其他操作,甚至阻止接听指定的电话。每一个服务是一个android.app.Service的子类。•除此之外,其他的程序还可以与服务进行通信。当与服务连接成功后,就可以利用服务中共享出来的接口与服务进行通信了。例如,控制音乐播放的服务允许用户暂停、重放、停止音乐的播放。广播接收者组件(Broadcastreceivers)•广播接收者组件的唯一功能就是接收广播消息,以及对广播消息做出响应。有很多时候,广播消息是由系统发出的,例如,时区的变化、电池的电量不足、收到短信等。除此之外,应用程序还可以发送广播消息,例如,通知其他的程序数据已经下载完毕,并且这些数据已经可以使用了。•一个应用程序可以有多个广播接收者,所有的广播接收者类都需要继承android.content.Broadcast-Receiver类。•广播接收者与服务一样,都没有用户接口,但在广播接收者中可以启动一个Activity来响应广播消息,例如,通过显示一个Activity对用户进行提醒。当然,也可以采用其他的方法或几种方法的组合来提醒用户,例如,闪屏、震动、响铃、播放音乐等。内容提供者组件(Contentproviders)•内容提供者可以为其他应用程序提供数据。这些数据可以保存在文件系统中,例如,SQLite数据库或任何其他格式的文件。每一个内容提供者是一个类,这些类都需要从android.content.ContentProvider类继承。•在ContentProvider类中定义了一系列的方法,通过这些方法可以使其他的应用程序获得和存储内容提供者所支持的数据。但在应用程序中不能直接调用这些方法,而需要通过android.content.ContentResolver类的方法来调用内容提供者类中提供的方法。AndroidManifest.xml文件的结构•每一个Android应用程序必须有一个AndroidManifest.xml文件(不能改成其他的文件名),而且该文件必须在应用程序的根目录中。在这个文件中定义了应用程序的基本信息,在运行Android应用程序之前必须设置这些信息。下面是AndroidManifest.xml文件在Android应用程序中所起的作用。•在默认情况下,Android系统会限制使用某些API,因此,需要在AndroidManifest.xml文件中为这些API授权后才可以使用它们。•可以为授权应用程序与其他的应用程序进行交互。•可以在AndroidManifest.xml文件中配置一些特殊的类,这些类可以在应用程序运行时提供调试及其他的信息。但这些类只在开发和测试时使用,当应用程序发布时这些配置将被删除。小结•本节主要介绍了Android应用程序的架构。在Android应用程序中,资源一般都放在res目录的子目录中,特定的子目录代表不同的资源类型,•例如,drawable目录表示图像资源,layout目录表示布局资源等。•由于一个Android应用程序需要调用其他的Android应用程序的部分资源,这就需要Android应用程序中任何组件都可以被实例化•因此,在Android应用程序中没有Main函数,所有可以被实例化的组件都需要在AndroidManifest.xml文件中定义,Android目前支持4种应用程序组件:Activity、Service、Broadcastreceivers和Contentproviders。•AndroidManifest.xml文件除了可以定义这4种应用程序组件外,还可以定义其他信息,例如,为限制级API授权、定义Java包等。
本文标题:android程序基本构成(基础篇).
链接地址:https://www.777doc.com/doc-2897356 .html