Intent学习

一、Intent类

1、Intent Name部分

对于Intent对象来说,组件名称不是必须的,如果添加了组件名称则该Intent为“显示Intent”,这样Intent在传递对象的时候会直接根据Component  Name对象的信息去寻找目标组件。如果不设置组件名称,则为“隐式Intent”,Android会根据Intent中的其他信息来确定响应该Intent的组件是哪个。

2、Action部分

Action为一个字符串对象,其描述了该Intent会触发的动作。Android系统中已经预先定义了一些表征Action的常量,同时,开发人员也可以自己定义Intent的动作描述。

3、Data部分

Data描述Intent的动作所操作的数据的URI及类型,不同的Action对应不同的操作数据。当为组件进行Intent的匹配检查时,正确设置Data的URI资源和数据类型很重要。

4、Category部分

Category为字符串对象,其包含了可以处理Intent的组件的类别信息,Intent中可以包含任意个Category。同Action一样,Android系统中预先定义了一些Category常量,但是不可以自行定义Category。

5、Extra部分

Extra是一组键值对,其包含需要传递给目标组件并由其处理的一些额外信息。

6、Flags部分

一些有关系统如何启动组件的标志位,所以的标志位都已经在Android系统中预先定义。

二、IntentFilter类简介

当Intent在组件之间进行传递时,组件如果需要告诉Android系统自己能够响应和处理哪些Intent,就需要使用IntentFilter对象。顾名思义,IntentFilter对象负责过滤组件无法响应和处理的Intent,只将自己关心的Intent接收进来进行处理。

Intent实行“白名单”管理,即只列出组件乐于接受的Intent,IntentFilter只会过滤隐式Intent,显式的Intent会被直接传递到目标组件,一个隐式的Intent只有通过了组件的某一个IntentFilter的过滤,才可以被组件接收并处理。

诸如Activity,Service,Broadcast Receiver这些组件可以有一个或多个IntentFilter,每个IntentFilter相互独立,只需要通过一个即可。

IntentFilter中具有与Intent对应的用于过滤Action、Data和Category的字段,一个Intent对象要想被一个组件处理,必须通过这3个环节的检查。

1、检查Action

尽管一个Intent只可以设置一种Action,一个IntentFilter却可以持有一个或者多个Action用于过滤,到达的Intent对象只需要匹配其中一个Action即可。但是IntentFilter的Action部分不可以为空,如果为空则会阻塞掉所有的Intent。相反,如果Intent的Action字段未设置,其将通过所有的IntentFilter的Action

2、检查Data

同Action一样,IntentFilter中的Data部分也是可以为一个或多个,而且可以没有。每个Data包含的内容为URI和数据类型,进行Data检查时主要也是对这两点进行比较。

3、检查Category

IntentFilter中可以设置多个Category,检查Category时,只有当Intent对象中所有的Category都匹配Intent中的Category时该对象才可以通过检查,并且当Intetn对象中所有的Category可以比Intent中的Category多,但是必须都包含Intent对象中所有的Category。如果一个Intent中没有设置Category,则其将通过所有IntentFilter的Category检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值