Android开发者选择从根据不同的组件类型组件的目的决定(如与一个用户或存储数据接口)。图1。例如Android应用程序。FriendTracker和FriendViewer应用由多个不同类型的组件,每个提供一个不同的组功能。Activity提供一个用户界面,Service执行后台处理,Content提供存储,Broadcastreceiver接收机其他应用程序的信息。ComponentTypesandroid系通定义了4种组件类型。Activity
组件定义应用程序的用户界面。通常,应用程序开发者定义每一个活动“画面。”Activity可以自己开始,也可能通过传递和返回值。在一时间只有一个键盘的系统Activity可以进行处理,在这个时候所有其他的Activity都会被暂停。Service组件执行后台处理。当一个活动需要进行一些操作,在用户界面消失以后(如下载一个文件或播放音乐),它通常采取此种动作特殊设计的服务。开发人员还可以在系统启动使用特殊的守护进程,Service通常定义一个远程过程调用(RPC),其他系统组件可以用来传送接口命令和检索数据,以及
注册一个回调函数。Content组件存储和共享数据用关系数据库接口。每个Content供应者都有一个关联的“权限”来形容它的内容包含。其他组件使用时作为一个handle执行SQL
查询(如的SELECT,INSERT或DELETE内容。虽然Content供应者通常存储把数值放在数据库记录中,数据检索是实现特殊的例子,文件也同时通过内容提供商共享接口。Broadcastreceiver该组件作为为从邮件信箱发送信息给他应用程序。通常,广播消息的应用程序代码隐含的目的地。因此,广播接收器订阅这些目的地接收发送给它的消息。应用程序代码也可以解决明确广播接收机包括命名空间分配。图1显示了FriendTracker和FriendViewer应用所包含的不同的组件类型。开发者组件使用一个主要定义文件(也用于定义权限,稍后介绍)。上有一个应用程序的组件的数量没有限制定义每种类型,但作为习惯,一组件应具有相同的名称该应用程序。通常情况下,这是作为在FriendVieweractivity中进行注册。这一动作通常指示主activity作为该系统应用程序启动器用于启动用户界面;然而,如果需要启动特定的activity,开发者需要者在选择配置manifest信息来实现这一个功能。在在FriendTracker应用,例如,FriendTrackerControl活动被标记为主用户界面的启动点。在这种情况下,我们保留名称“FriendTracker”为服务执行的核心组成部分的应
用程序逻辑。
在FriendTracker应用包含四种类型的组件。在FriendTracker服务搜寻调查外部服务并发现好友的位置。在我们的示例代码中,位置是我们随机生成的,但直接通过网络连接组件接口的服务。该FriendProviderContent提供保持最新的朋友地理坐标,FriendTrackerControl活动用于启动和用户界面停止跟踪好友功能,该系统一旦启动BootReceiver通知从广播系统启动。该FriendViewer应用主要是显示有关好友的位置的信息。每个启动的FriendViewer将会列出了所有的朋友和他们的地理坐标,FriendMap显示他们在地图上的位置。FriendReceiver将会等待接收附近的手机发送的消息这个消息来一个所指定的朋友。尽管我们可以在这些组件内放置在FriendTracker应用,但是我们仍然创建了一个单独的应用程序来展示跨应用的沟通。此外,通过分离程序功能和接口,我们可以创建不同的显示和功能,可选用户界面是,许多应用程序可以重用这些来自FriendTracker的功能。ComponentInteraction该组件交互的主要机制是一个intent,这是一个简单的消息对象,其中包含一个目的地组件的地址和数据。Android的API定义了他的方法中传入intent,并使用该信息来启动一个activity例如开始一个