android的intent学习笔记.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
android的intent学习笔记

Android?IntentFilter?匹配原则浅析1 Intent分为两大类,显式和隐式。显式事件,就是指通过 component Name 属性,明确指定了目标组件的事件。比如我们新建一个Intent,指名道姓的说,此事件用于启动名为com.silenceburn.XXXX”的Activity,那么这就是一个显式事件。隐式事件,就是指没有 component Name 属性,没有明确指定目标组件的事件。比如系统向所有监控通话情况的程序发送的“来电话了!”的事件,由于系统不确定谁会处理这个事件,因此系统不会明确指定目标组件,也就是说没有目标组件,那么这就是个隐式的事件。此处只是简介显式和隐式事件,更精确详细的描述请查阅SDK文档,我们只需要记住一点,两种事件的最大区别是 component Name 属性是否为空。2 事件过滤策略和 IntentFilter系统在传送显式事件时非常方便,因为如果把Intent比作一封信,那么component Name就是一个详细的收件人地址,系统可以精确的把显式事件送达目标组件。而传送隐式事件时,就比较麻烦了。因为这封信的信封上,没有写收信地址!那怎么办呢?系统做了一个艰难的决定,就是把信拆开看看。通过信件内容里面的线索,去寻找合适的收件人。比如信中的线索描述到:“收信人是男性,快30岁了,未婚,喜欢玩游戏”,那么系统就在小区里面去找这样的人。非常值得庆幸的事情是,这个小区的人素质非常高,每户人家都写了点自我介绍在门口,比如张三写道:“我是男性,90后,未婚,喜欢玩游戏”,李四写道:“我是女性,快30岁了,未婚,喜欢逛街”等等等等。有了每户人家的自我介绍,系统就能很快的定位真正的收件人了!上面是一个类比的例子,不过android系统处理隐式事件的策略,基本上就是上述这种模式了。首先系统会通过观察Intent的内容(打开信件看内容),取得匹配线索,系统所需的线索是如下三种: action data (both URI and data type) category其次,系统中每个组件,如果想收取隐式事件,则必须声明自己的IntentFilter(自我介绍,我对什么样的信件感兴趣)。至于怎么写IntentFilter,已经相当明了了,那就是应该是这样写:我是组件XXXX,我想要接收这样的隐式事件:它的ACTION必须是 XXX,它的 category 必须是 YYYY ,它包含的data必须是ZZZZ 如果组件不声明IntentFilter,那么所有的隐式事件都不会发送给该组件。(注意,这并不影响向该组件发送显式事件。)对于系统中发生的每个隐式事件,系统都会尝试将 action, data , category 和系统中各个组件声明的 IntentFilter 去进行匹配,以找到合适的接收者。3.IntentFilter匹配原则对于显式事件,系统可以精确送达。对于隐式事件,系统分析事件的 action, data , category 内容,并和各个组件声明的IntentFilter进行匹配,找出匹配的组件进行送达。action和category没什么好说的,再此我将最复杂的data匹配展开来进行描述一下:首先务必认识到,data是一个相对复杂的要素。data由URI来描述和定位,URI由三部分组成,scheme://host:port/path 模式://主机:端口/路径此外在事件中,还可以设置data的MIME类型,作为事件的datatype属性。为了描述方便,下文将IntentFilter简写为filter,请大家注意。首先明确一个匹配原则,就是对于URI的匹配,只比较filter中声明的部分。部分匹配原则:只要filter中声明的部分匹配成功,就认为整个URI匹配成功。举例来说, content://com.silenceburn.SdCardTester:1000/mydata/private/和filter定义为 content://com.silenceburn.SdCardTester:1000/ 是可以匹配的。注意filter中并没有定义path部分,但是依然可以匹配成功,因为filter不声明的部分不进行比较。换句话讲,任何符合content://com.silenceburn.SdCardTester:1000/的事件,无论path是什么,都可以匹配成功。接下来是真正的data部分的,也就是URI的匹配规则如下:1. 如果data的URI和datatype为空,则 filter 的URI和type也必须为空,才能匹配成功2. 如果data的URI不为空,但是datatype为空,则 filter 必须定义URI并匹配成功,且type为空,才能匹

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档