首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

Android之Application Components

作者:  时间: 2011-06-06

Application Components

  应用程序组件是Android应用程序的基本构建块。每个组件是一个系统能够进入你应用程序的入口点。对用户来说并不是所有的组件都是实际的入口点,而是其中一些依赖于另一些,但是每个都有自己的实体的存在,并且扮演着一个独特的角色--每一个都是帮助你定义自己应用程序整体行为的一个单独构建块。

  有4种不同的应用程序组件,每一种都提供不同的服务,每一种都一个不同的生命周期,生命周期定义了组件的创建和消亡。

  接下来介绍上述的4种不同的应用程序组件。

Activities

  一个activity代表一个拥有一个用户接口的屏幕。例如,电子邮件应用程序可能有一个activity展现邮件列表,另一个activity构建email,还有一个用来阅读activity。虽然在邮件应用程序中activities一起工作来展现一个连续的用户体验,但每一个都是相对于其它的都独立。这样,不同的应用程序可以以任何一个activity开始(如果邮件应用程序允许)。例如,一个照相应用程序可以以邮件应用程序中的构建新邮件的activity来启动,目的是让用户分享邮件。

  一个activity是一个实际了Activity的子类。

Service

  一个Service是一个运行在后台以运行长时间操作或者是实现远程操作的行为的组件。一个Service没有提供用户服务。例如,当一个用户在另运行另一个应用程序时音乐播放Service可以在后台运行,或者是从网络获取数据而不打断当前activity与用户的交互。另一个组件,例如activity,可以开始一个Service然后证它工作或者绑定它而与它交互。

  一个Service是一个实现了Service的子类。

Content providers

  一个Content provider管理器管理应用程序分享的数据集。你可以存储这些数据在文件系统、一个SQLite数据库、在Web蔌者是任何其它的你的应用程序可以访问的永久性存储设备。通过content provider,其它应用程序可以查询甚至修改数据(如果content provider允许)。例如,Android系统提供一个content provider来管理用户的联系人信息。这样的话,任何一个拥有合适权限应用程序可以查询content provider的一部来然后来读和写关于某个人的信息。

  Content providers同样在读和写一个应用程序私有数据时很有用。例如,

  一个content provider是一个实现了ContentProvider类的子类,并且必须实现一个标准API集以允许其它应用程序行使事务。

Broadcast receivers

  一个Broadcast receiver是一个响应系统级广播通知的组件。很多的广播源于系统--例如,一个通知屏幕已经关闭的广播、电量很低的广播、图片锁定的广播。应用程序同样可以初始化广播-例如,让其它应用程序知道一些数据已经被下载到设备上并且可以被他们使用。虽然broadcast receivers没有用户接口,他们可以建立一个状态条的通知通知用户一个广播事件发生。更普通的是,一个broadcast receiver对其它组件来说是一个网关(gateway),只做很少一部分工作。例如,它初始化一个苦于某个事件的服务去完成一项工作。

  一个broadcast receiver实现BroadcastReceiver,并且每个broadcast被Intent对象传递。

OTHER

  Android系统调序的一个特别之处是任何一个应用程序可以开启另一个应用程序的组件。例如,如果你想要用户使用摄像头拍一张相片,可以另一个程序有这个功能,然后你的应用程序是使用它,而不是开发一个activity用拍摄一张相片。你不需要组合和连接摄像应用程序的代码。反而,你可以简单的启动摄像应用程序的拍照activity。当完成的时候,相片被返回到你的应用程序然后你可以使用它。对用户来讲,他感觉报像是你应用程序的一部分。

  当系统启动一个组件,它为该应用程序新建一个进程(如果该进程不在运行的话),并表示例这个组件需要的类。例如,如果你的应用程序开启一个摄像机应用程序的activity来拍照,那个activity运行在摄像机应用程序的进程中,不是在你的应用程序进程中。因此,和其它操作系统的应用程序不一样,Android应用程序没有一个简单的入口点(entry point)(也就是没有main()函数)。

  因为系统运行第一个应用程序在一个单独的进行中,并且赋予不同的权限以限制访问其它应用程序,你的应用程序不能直接激活其它应用程序的组件。可是,Android系统可以。所以,要激活其它进程中的组件,你必须发送一个消息给系统,指明你的意图(intent)为启动某一个组件。系统可以为你激活组件。