首页 > 代码库 > Android Intent 解析之一

Android Intent 解析之一

Intent的架构包括三方面:

Client,也就是发送这个Intent的activity;

Server,也就是activityManagerService.java,它主要是负责分发这些Intent给适当的对象;

Target,也就是那些需要处理这个Intent的activity,我们称为Receiver;

Intent的三个主要方面:Action、Data、Category在之前的文档中也有介绍,在此就不在叙述了。

下面回到前面的例子:

Intent intent = new Intent(AudioManager.ACTION_AUDIO_BECOMING_NOISY);

mContext.sendBroadcast(intent);

第一句话是构造一个Intent,注意只传入了一个参数,这个参数就是一个Action,没有指定data以及Category;也就是说如果某个Receiver写成这样(在AndroidManifext.xml里面):

<receiver android:name="MediaButtonIntentReceiver">           

    <intent-filter>              

   <action android:name="android.media.AUDIO_BECOMING_NOISY" />         

</intent-filter> </receiver>

当然,如果不喜欢在.xml里面指定,也可以直接在你的应用里面使用代码注册,调用registerReceiver将你的对象注册到系统中去,效果是一样的。
这样,一旦这个应用监测到这个广播消息之后,他的onReceiver函数就会被调用了。

第二句话的目的是把这个消息广播出去,这个是异步的,也就是说广播出去就没事了,谁关系谁处理,从此和我没有任何关系了。

mContext.sendBroadcast(intent);这句之中的mContex即Application Context,这是一个典型的binder调用,调用之后就转到ActivityManagerNative.java中处理了。从此便进入了另一个世界(跑到服务端去了)。