应用组件-Application Components

应用组件是构建Android应用程序的关键和基石。 每个组件是一个不同的入点,系统可以从这些点进入到你的应用。对于用户来说,并不是每个组件都是实际的入点,但它们之间有一些依赖.但是每一个存在的组件 都有它自己的一个入点,并扮演一个特定的角色--每一个都是独一无二的构建块,帮助你定义你的应用的整体行为.

有四个不同类型的应用组件,每个类型服务于一个不同的目的,并有不同的生命周期,生命周期定义了如何创建和销毁它.

下面是四种应用组件:

Activities活动

  • 一个activity在一个屏幕,显示一个用户接口.比如,一个email应用可能有一个activity,这个activity用于显示新的 email列表.而另一个activity用于写邮件,还有一个activity用于读取邮件.虽然这些activities一起工作于email应用 中,形成一个完整的用户体验但每一个部分又是相互独立的.正因如此,不同的应用才能启动这些活动的任意一个(如个email应用允许它).比如,一个照相 的应用,能开启一个email应用中写封新邮件的活动,让用户分享一张照片.

  • 一个activity被当作Activity的子类来实现的,在Activities开发指南中,你可以学到更多关于它的使用

Services服务

  • 一个service是长期运行在后台,执行操作的组件,甚至可以为远程进程工作.一个服务不提供用户界面.比如,当用户在其他应用中时,一个服务 可能在后台播放音乐,或者在后台获取数据,这并不影响用户跟其他的活动进行交互操作.其他的组件,比如一个activity,可以启动一个服务,并可以让 它运行或者邦定到这个activity,以便与其进行交互操作.

  • 一个服务是作为Service子类来实现的,在Services开发指南中,你能学到更多关于它的使用

Content providers 内容提供

  • 一个content provider管理共享的应用数据集.你可以把数据存在文件系统中,一个SQLite数据库中,网上,或你应用可以访问的永久存储器中.通过内容提供 者,其他的应用可以查询甚至修改数据(如果内容提供者允许的话). 比如,Android系统提供一个内容提供者管理用户通信录信息.因此,任何拥用适当权限的应用,可以查询内容提供者的部分来(比如 ContactsContract.Data)读取和写入关于某个人的信息.内容提供者对于读取和写入属于你的应用的私有的非共享数据也是非常有用的,比 如Note Pad样例应用程序,就使用内容提供者来保存笔记的.

  • 一个内容提供者被当作ContentProvider的子类实现,并且必须实现一套标准的APIs,以让其他的应用能执行交换操作。

  • 参考Content Providers开发指南,以了解更多信息.

Broadcast receivers广播接收者

  • 广播接收者是一个响应系统范围广播公告(通知)的组件.许多广播信息,都是来源于系统,比如,通知屏幕关闭的公告,电量低,或抓取了一张图片.应 用也能发起广播,比如,让其他的应用知道一些数据已下载到设备了,并且他们可以使用了。虽然广播接收者,不能显示用户界面,但当一个广播事件发生时,它们 可以创建一个状态通知器,去提醒用户.但更多情况下,一个广播接收者只是一个其他组件,想要做极小量事件的一个"gateway”(途径).举例,它可能 发起一个服务,去执行关于某个事件的一些工作.

  • 一个广播接收者,是当作BroadcastReceiver子类被实现的.每个广播接收者都是从Intent对象衍生出来的。更多信息,请参考BroadcastReceiver类

任何一个应用能启动另一个其他应用的组件,是Android系统设计独一无二的方面(aspect).比如,你想要用设备的照相机拍一张图片.其他 的应用已经有了这个功能,并且你的应用可以使用它,而不需要你自己去开发一个拍照相的activity.你并不需要合并(包含)或者甚至是链接 camera应中的代码; 而只是,简单的启动camera应用中的活动,来拍照就可以了.当拍照完成,甚至把照片返回给你的应用,所以你能使用它。对于用户来讲,camera像是 你应用中一部分.当系统开启一个组件时,它会启动那个应用的进程(如果该应用没有运行),并实例化该组件所需要的类.举例,如果你的应用开启一个 camera应用的activity,来拍照,这个activity将运行在属于camera应用的进程中,而不是在你的应用的进程中.因此,不像大多数 其他的系统的应用,Android应用,没有单个的入点(比如没有main()函数).

因为系统运行的每个应用,在一个带有文件权限的,独立的进程中,这样限制了对其他应用的访问,你的应用不能直接访问其他应用中的组件.但时,Android系统也能激活其他应用的组件.你必须传一个消息给系统,指定你想要启动的组件,然后系统为你激活这个组件.