android的intent学习笔记_计算机-软件工程.pdf
《android的intent学习笔记_计算机-软件工程.pdf》由会员分享,可在线阅读,更多相关《android的intent学习笔记_计算机-软件工程.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习必备 欢迎下载 Android IntentFilter 匹配原则浅析 1 Intent 分为两大类,显式和隐式。显式事件,就是指通过 component Name 属性,明确指定了目标组件的事件。比如我们新建一个 Intent,指名道姓的说,此事件用于启动名为 com.silenceburn.XXXX”的Activity,那么这就是一个显式事件。隐式事件,就是指没有 component Name 属性,没有明确指定目标组件的事件。比如系统向所有监控通话情况的程序发送的“来电话了!”的事件,由于系统不确定谁会处理这个事件,因此系统不会明确指定目标组件,也就是说没有目标组件,那么这就是个隐式
2、的事件。此处只是简介显式和隐式事件,更精确详细的描述请查阅 SDK 文档,我们只需要记住一点,两种事件的最大区别是 component Name 属性是否为空。2 事件过滤策略 和 IntentFilter 系统在传送显式事件时非常方便,因为如果把 Intent 比作一封信,那么 component Name 就是一个详细的收件人地址,系统可以精确的把显式事件送达目标组件。而传送隐式事件时,就比较麻烦了。因为这封信的信封上,没有写收信地址!那怎么办呢?系统做了一个艰难的决定,就是把信拆开看看。通过信件内容里面的线索,去寻找合适的收件人。比如信中的线索描述到:“收信人是男性,快 30 岁了,未婚
3、,喜欢玩游戏”,那么系统就在小区里面去找这样的人。学习必备 欢迎下载 非常值得庆幸的事情是,这个小区的人素质非常高,每户人家都写了点自我介绍在门口,比如张三写道:“我是男性,90 后,未婚,喜欢玩游戏”,李四写道:“我是女性,快 30岁了,未婚,喜欢逛街”等等等等。有了每户人家的自我介绍,系统就能很快的定位真正的收件人了!上面是一个类比的例子,不过 android 系统处理隐式事件的策略,基本上就是上述这种模式了。首先系统会通过观察 Intent 的内容(打开信件看内容),取得匹配线索,系统所需的线索是如下三种:action data(both URI and data type)catego
4、ry 其次,系统中每个组件,如果想收取隐式事件,则必须声明自己的 IntentFilter(自我介绍,我对什么样的信件感兴趣)。至于怎么写 IntentFilter,已经相当明了了,那就是应该是这样写:我是组件 XXXX,我想要接收这样的隐式事件:它的 ACTION 必须是 XXX,它的 category 必须是 YYYY,它包含的 data 必须是 ZZZZ 我们新建一个指名道姓的说此事件用于启动名为的那么这就是一个显式事件隐式事件就是指没有属性没有明确指定目标组件的事件比如系统向所有监控通话情况的程序发送的来电话了的事件由于系统不确定谁会处理这个事件因此系 细的描述请查阅文档我们只需要记住
5、一点两种事件的最大区别是属性是否为空事件过滤策略和系统在传送显式事件时非常方便因为如果把比一封信那么就是一个详细的收件人地址系统可以精确的把显式事件送达目标组件而传送隐式 通过信件内容里面的线索去寻找合适的收件人比如信中的线索描述到收信人是男性快岁了未婚喜欢玩游戏那么系统就在小区里面去找这样的人学习必备欢迎下载非常值得庆幸的事情是这个小区的人素质非常高每户人家都写了点自我学习必备 欢迎下载 如果组件不声明 IntentFilter,那么所有的隐式事件都不会发送给该组件。(注意,这并不影响向该组件发送显式事件。)对于系统中发生的每个隐式事件,系统都会尝试将 action,data,categor
6、y 和系统中各个组件声明的 IntentFilter 去进行匹配,以找到合适的接收者。3.IntentFilter 匹配原则 对于显式事件,系统可以精确送达。对于隐式事件,系统分析事件的 action,data,category 内容,并和各个组件声明的 IntentFilter 进行匹配,找出匹配的组件进行送达。action 和 category没什么好说的,再此我将最复杂的 data 匹配展开来进行描述一下:首先务必认识到,data 是一个相对复杂的要素。data 由 URI 来描述和定位,URI 由三部分组成,scheme:/host:port/path 模式:/主机:端口/路径 此外在
7、事件中,还可以设置 data 的 MIME 类型,作为事件的 datatype 属性。为了描述方便,下文将 IntentFilter简写为 filter,请大家注意。首先明确一个匹配原则,就是对于 URI 的匹配,只比较 filter 中声明的部分。部分匹配原则:只要 filter 中声明的部分匹配成功,就认为整个 URI 匹配成功。举例来说,content:/com.silenceburn.SdCardTester:1000/mydata/private/和 filter 定义为 content:/com.silenceburn.SdCardTester:1000/是可以匹配的。注意 fil
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android intent 学习 笔记 计算机 软件工程
限制150内