Android 手机操作系统是一款开源的系统。对编程有所了解的朋友们可以通过各种编写方式来使这款系统应用于手机中来满足各种需求。下面我们将会对Android组件的一些概念进行一个总结,以方便大家的学习。#t#
Android的一个核心特性就是,一个应用程序能利用另外应用程序的元素(假如这些应用程序允许这样做)。举个例子,如果你的程序需要展示一个可以滚动的图片列表,正好有另外一个程序已经有这样一个合适的滚动条并且也允许其他程序使用,那么你就可以使用这个滚动条来完成你的工作,而不是开发你自己的。你的应用不需要内含其他应用的代码或者连接到他。相反,它只是简单的启动了需要的部分。
为了让这个特性能够工作,系统必须能够实现运行一个部分组件被需要的应用,并为那个部分实例化一个Java对象。因此,与大多数系统上的应用不一样,Android应用没有为应用中的任何部分提供一个单一的入口(比如说,没有main()函数)。相反的,他们用系统能实例和运行的本质组件。下面是4种组件:
Android组件之Activities
一个活动为一个具有焦点、用户可以操作的行为展示了一个可视化的用户接口。举例,一个活动可以展示一个用户可以选择的菜单选项列表,或者展示有字幕的照片。一个文字短信应用可能有一个用来展示可以选择发送短信联系人列表的活动,一个用来给这个选择的联系人写短信的活动,其他用来查看以前的短信和改变设置的一些活动。虽然他们一起工作,构成了一个联系紧密的用户接口,每一个活动相对于其他活动却是独立的。每一个活动都是继承于基类Activity。
一个应用可以只有一个活动,或者就像上面的文字短信应用一样,可以有几个。这些活动是什么,有多少,当然,取决于应用程序和他的设计。典型的,这些活动中的一个Activity被标记为程序启动后第一个呈现在用户眼前。从一个活动转到另外一个活动只是在当前的活动启动下一个。
每一个活动都被给与一个缺省的窗口用来绘制。典型的,这个窗口填充了整个屏幕,但是他可以比这个窗口小,漂浮在其他窗口之上。一个活动也可利用额外的窗口。举例,一个弹出的对话框等待用户的反应,出现在这个活动的中间,或者当用户在屏幕上选择特别的选择时的一个位用户展示重要信息的窗口。
这个视觉上的窗口的内容由一套视图提供,继承于基类View的实例。每一个视图控制一个在窗口内的特殊的矩形空间。父类视图包含并安排了子类的布局。在这套视图体系底部的视图在他们所控制的矩形空间中绘制,并对用户直接对这个空间的行为作出反应。因此,视图就是用户行为发生交互的地方。举例,一个视图可能展示了一个很小的图像,并在用户触摸这个图片时创建了一个动作。Android有大量的已经完成,你可以使用的视图,包括按钮,文字框,滚动条,菜单项,复选框…。
一套视图通过Activity.setContentView()填充到Activity所在窗体中。这个内容视图使这套体系的根视图。
Android组件之Services
服务不需要可视化的用户界面,相反在一段不确定的时间段里运行在后台。举例,当用户在处理其他问题时,服务可以播放背景音乐,或者他可以从网上获取数据,计算,提高,提供给活动所需要的结果。每个服务继承于服务基类。
一个基本的例子就是媒体播放器播放列表中的歌曲。播放应用程序可能会有一个或多个活动,允许用户选择歌曲并播放它们。但是,音乐回放不会被一个活动处理,因为用户期望音乐在他们离开这个播放程序界面后仍能播放。为了满足这个要求,这个播放活动应该开启一个在后台运行的服务。系统就能继续播放音乐,即使用户选择播放音乐后离开了这个界面。
可以实现连接到(绑定到)一个正在运行的服务(也可以开启一个当前没有运行的服务)。连接之后,你可以通过系统给出的一个接口与这个服务进行通信。对于这个音乐服务,这个借口可以允许用户去暂停,倒退,停止,重放和回放。
就像活动和其他的组件,服务运行在应用程序进程中的主线程中。因此,他们不会阻塞到其他组件或者用户界面,服务通常会生成其他线程用来做那些耗时间的任务(就像音乐播放一样)。
Android组件之Broadcast receivers
广播接收器只能接收广播,对广播的通知做出反应。很多广播都产生于系统代码--举例,时区改变的通知,电池电量不足,照了一张相片,或者用户改变了语言偏好。应用也可以发出广播--举例,让其他应用知道已从网上下载了一些数据,并且它们可以使用这些数据。
一个应用可以有很多广播接收器来对它认为重要的通知做出反应。所有的接收器继承于BroadcastReceiver基类。
广播接收器不展示一个用户界面。但是,它们可以为他们接收到得信息启动一个活动,或者它们可以使用NotificationManager来通知用户。通知可以以不同形式得到用户的注意--闪烁背景灯,震动手机,发出声音,等等。它们通常在状态栏上放置一个暂时的图标,用户可以通过打开这个图标获取信息。
Android组件之Content providers
内容提供者提供了一套特殊的可供其他应用使用的数据。这些数据可以存储在文件系统中,SQLite数据库中,或者其他有意义的形式。内容提供者继承于ContentProvider基类,实现了一套标准的允许其他用户检索,储存数据的方法。但是,应用程序并不能直接使用这些方法。他们必须使用ContentProvider的实例,调用它的方法。ContentResolver可以与任何内容提供者交流,他们之间的合作可以管理进程间的通信。
不管什么时候有一个需要被一个特殊的Android组件处理的请求,Android确保这个应用组件的进程在运行中,如果有需要就启动它,确保组件的合适的实例是可用的,如有需要就实例化它。