题记:这一节感觉比较抽象一点,嘿嘿,先纸上谈会兵,搞清楚下它们到底是个什么,又有什么作用,会用在哪,怎么用的。

主要包括以下三个方面的内容:

  • Intent对象
  • Intent Filter
  • 二者的运作方式

一、Intent对象

  感觉Intent对象是一个中介,它能够起到沟通三大核心组件的作用:activity,service,broadcast,实际上是一个抽象的数据结构,用来表示组件之间交互所需要的信息和数据。针对不同的组件,分别有不同的Intent实例对象,这样之间传递消息时,保证只传递到指定的那一类组件去。可以看作是一个信息的集合,包括了目标组件的信息和目标系统的信息。主要包括以下几类:

  • Component name:组件名称,用来指定Intent 目标匹配组件。可以是具体的类名,或者是包名(直接指向在manifest中定义该包名的应用)。该属性为可选,不一定非得设置。若不设置,则通过intent filter来匹配目标组件。两种方式的区别:前者是指定目标,用来匹配满足其指定条件的组件;后者就是目标本身的定义,用来被匹配。
  • Action:实际上就是一个具有一定格式的字符串,用来表示满足条件的动作或者已经触发的动作(广播)。使用时,直接通过setAction()方法或者getAction()方法来设置或者获取当前的action,一旦调用过setAction(),那么在实际请求过程中,会去intent filter中查找满足action的组件。
  • Data:就是Intent中携带的数据,只不过形式是URI或者MIME类型的,根据目标组件的不同而不同。方法包括:setData()和setType(),指向两种不同类型的数据形式。
  • Category:也是一个字符串形式的标识,用来标识目标intent必须满足的类型。
  • Extras:存放额外数据的,可以放置bundle数据以及一些状态等。
  • Flags:标志位,用来标识,具体标识什么,还不明白。

  Intent分为两大类:

  • Explicit Intents:目标清晰的Intent,通常指定了component name,也即目标。
  • Implicit Intents:不清晰的Intent,需要通过Intent Filter来匹配目标。

  Intent filter中必须会起作用的三大条件:action,category,data。

二、Intent Filter

  按西瓜的理解就是,定义的筛选条件,当有请求过来的时候,按照一定的规则和筛选条件对component进行筛选,查找满足条件的,主要是对implicit intent起作用。匹配规则如下:

  • action节点:一个intent filter应该至少有一个action节点,否则的话任何intent过来都无法匹配上。当有多个action节点时,请求的intent只需要满足其中的一条就可以成功匹配上;
  • category节点:一个intent filter可以有多个category节点,当intent请求发送过来时,需要intent中的所有category要能在该intent filter下找到对应的category。当该节点不存在时,默认该项匹配通过。
  • date节点:匹配指定规则的URI或者MIME类型的数据。data中可以单独定义是匹配URI还是MIME,还是URI的一部分。当然,如果二者同时定义的话,需要同时满足才算成功通过匹配。比较模糊的地方在于:date节点即可以定义请求的intent数据格式,也可以看作成该component返回的数据格式,但是何时用作何种操作,怎么判断呢?

三、二者的运作方式

  请求时传递Intent对象,然后由android 系统来解析这个intent对象,根据intent filter查找,满足intent中要求的目标组件是否存在。intent fileter不光能查找到目标组件,还能通过它来过滤出目标组件集合。原来正常应用程序界面上面展示的应用程序图标,都是系统通过"action:android.intent.action.MAIN"和"category:android.intent.category.LAUNCHER"这两个条件来查找到满足条件的application的。

 

如有错误处敬请指正~~转载请说明出处

posted on 2013-01-31 17:17  西瓜瓜瓜瓜瓜  阅读(218)  评论(0编辑  收藏  举报