4.2 Android的应用程序组件
Android应用程序中最令人振奋的特性是可以利用其他Android应用程序中的资源。例如,如果应用程序恰好需要一个显示图像列表的功能,而另一个应用程序正好有这个功能,只需要调用这个应用程序中显示图像列表的窗口即可。在Android程序中没有Main函数,取而代之的是一系列的组件,这些组件都可以单独实例化。本节将介绍Android支持的4种组件的基本概念。应用程序向外共享功能一般也是通过这4种应用程序组件实现的。
4.2.1 窗口(Activity)组件
Activity类可以显示一个窗口,该类的全名是android.app.Activity。Activity相当于C/S程序中的窗体(Form)或Web程序的页面。每一个Activity提供了一个可视化的区域,在这个区域中可以放置各种Android控件,例如,按钮、图像、文本框等。
在Activity类中有一个onCreate方法,一般在该方法中对Activity进行初始化。通过setContentView方法可以将Activity与View绑定,setContentView方法的参数一般为XML布局文件的资源ID。实际上,Activity上并不能自己放控件,而必须将控件放到与Activity绑定的View上。
一个带界面的Android应用程序可以由一个或多个Activity组成,至于这些Activity如何工作,或者它们之间有什么依赖关系,则完全取决于应用程序的业务逻辑。例如,一种典型的设计方案是使用一个Activity作为主Activity,在这个Activity中通过菜单、按钮等方式启动其他的Activity。在Android自带的程序中有很多都是这种类型的。
每一个Activity都会有一个窗口,在默认情况下,这个窗口是充满整个屏幕的,也可以将窗口变得比手机屏幕小,或者悬浮在其他的窗口上面。详细的实现方法将在后面的章节介绍。
4.2.2 服务(Service)组件
服务没有可视化接口,但可以在后台运行。例如,当用户进行其他操作时,可以利用服务在后台播放音乐,或者完成某些不需要用户干预的工作。每一个服务类必须继承自android.app.Service类。
现在举一个非常简单的使用服务的例子。在手机中会经常使用播放音乐的软件,在这类软件中往往会有循环播放或随机播放的功能。虽然在软件中可能会有相应的功能(通过按钮或菜单进行控制),但用户可能会一边放音乐,一边在手机上做其他的事,例如,与朋友聊天、看小说等。在这种情况下,用户不可能当一首音乐放完后再回到软件界面去进行重放的操作。因此,可以在播放音乐的软件中启动一个服务,由这个服务来控制音乐的循环播放,而且服务对用户是完全透明的,这样用户完全感觉不到后台服务的运行。甚至可以在音乐播放软件关闭的情况下,仍然可以播放后台背景音乐。
除此之外,其他的程序还可以与服务进行通信。当与服务连接成功后,就可以利用服务中共享出来的接口与服务进行通信了。例如,控制音乐播放的服务允许用户暂停、重放、停止音乐的播放。
4.2.3 广播接收者(Broadcast receivers)组件
广播接收者组件的唯一功能就是接收广播消息。有很多时候,广播消息是由系统发出的,例如,时区的变化、电池的电量不足、收到短信等。除此之外,应用程序还可以发送自定义广播消息,例如,通知其他的程序数据已经下载完毕,并且这些数据已经可以使用了。
一个应用程序可以有多个广播接收者,所有的广播接收者类必须继承自android.content. BroadcastReceiver类。
广播接收者与服务一样,都没有用户接口,但在广播接收者中可以启动一个Activity来响应广播消息,例如,通过显示一个Activity对用户进行提醒。当然,也可以采用其他的方法或几种方法的组合来提醒用户,例如,闪屏、震动、响铃、播放音乐等。
4.2.4 内容提供者(Content Provider)组件
内容提供者可以为其他应用程序提供数据,这些数据可以保存在文件系统中,例如,SQLite数据库或任何其他格式的文件。每一个内容提供者是一个类,这些类都需要从android.content. ContentProvider类继承。
在ContentProvider类中定义了一系列的方法,通过这些方法可以使其他的应用程序获得和存储内容提供者所支持的数据。但在应用程序中不能直接调用这些方法,而需要通过android.content.ContentResolver类的方法来调用内容提供者类中提供的方法。