android的工作机制,android:intent的工作机制

在应用中,我们可以以两种形式来使用Intent:

显式Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context, Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。

隐式Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。

对于直接Intent,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些间接Intent,通过解析,将

Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。

Intent

解析机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的

Intent。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的,判断方法如下:

1.如果Intent指明定了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;

2.如果Intent没有提供type,系统将从data中得到数据类型。和action一样,如果Intent指明定了type,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。

3.如果Intent中的数据不是content:

类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者mailto: )

进行匹配。同上,Intent 的scheme必须出现在目标组件的scheme列表中。

4.如果Intent指定了一个或多个category,这些类别必须全部出现在组件的类别列表中。比如Intent中包含了两个类

别:LAUNCHER_CATEGORY 和

ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别。Activities will very often

need to support the CATEGORY_DEFAULT so that they can be found by

Context.startActivity().

5.如果category 指定了ALTERNATIVE and

SELECTED_ALTERNATIVE.则可以通过queryIntentActivityOptions(ComponentName,

Intent[], Intent, int),查询Activity的action,addIntentOptions(int, int, int,

ComponentName, Intent[], Intent, int, MenuItem[])增加action等信息。

Intent 的研究离不开IntentFilter.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值