激活组件-Activating Components

4个组件中的其中三个组件---activities,serivces,和broadcast receivers----是被叫做intent的异步消息激活的.在运行时,Intents把某个的组件与其他的组件互相邦定,而不管这个组件是否属于 你的应用还是其他的应用(你可以把它们想像成一个消息,用于请求一个其他组件的动作).

一个intent是一个由Intent创建的对象.该对象定义了一个激活某个特定组件或者某个组件类型的消息,一个intent可以是显示的,同样,也可以是隐式的.

对于activities和services,一个intent(意图)定义了一个要执行的动作(比如:to”view”或"send" 些什么),并指定了要采用的URI格式的数据(其中一些,是其他组件启动所需要知道的).比如,一个intent可能传送一个请求给一个 activity,要显示一张图片或打开一个网页.在有些情况,你启动一个activity接收一个结果,这种情况下,activity将在Intent 中返回一个结果.(比如,你可以指示一个intent,让用户取一个人的联系方式,并返回给你,返回的intent中会包含一个指向选定联系方式的 URI.)

对于广播接收者,intent只是定义了一个做为广播的公告.(比如,一个广播指出,设备电池低,它只是包含了一个动作字串,表示”电池低”).

其他组件,内容提供者,不会被intents所激活.进一步讲,它是内容解释者(ContentResolver)所请求的目标所激活的.内容解释 者,处理所有与内容提供者的直接交换.所以组件不需要执行与提供者交换,而是调用ContentResolver对象方法.(这一句不好理解。)为了安全 起见,组件请求信息与内容提供者之间有一个抽象层.

下面是激活各种类型组件的几个方法:

  • 你可以通过传一个(或者一些要做新的事情)Intent参数给startActivity()或startActivityForResult()(当你想要activity返回一个参数)函数(),来启动一个activity.

  • 你可以传一个Intent给startService()方法,(或给一个新的指令给正在运行的服启),或者你可以传一个Intent给bindService()方法来邦定到服务.

  • 你可以通过使用sendBroadcast(), sendOrderedBroadcast(), 或者 sendStickyBroadcast()三种方法来广播一个intent。

  • 你可以对ContentResolver调用query()方法,对内容提供者进行查询

关于使用intents的详细信息,请看Intents and Intent Filters 文档。在后面的文档中,也有一些关于激活某个组件的信息Activities, Services, BroadcastReceiver and Content Providers.