现在的位置: 首页 > 综合 > 正文

android intent 之见解

2013年03月30日 ⁄ 综合 ⁄ 共 1369字 ⁄ 字号 评论关闭

一、 Intent 基本概念:


                         首先, Intent是用于负责应用之间通讯、消息传递的一种机制。

                         其次,Intent负责对应用中一个操作的动作、所涉及到的数据、附加数据进行描述。android就负责根据Intent的描述通过解析找到与之对应的组件,并完成相应的调用。

                         最后, Intent也可以应用于程序内部的Activity/svervice之间的交互,起到了一个粘合剂的作用,专门提供组件直接相互调用的信息,实现调用者于被调用者之间的解耦。

一句话总结基本概念:一个Intent就是对一个所要执行动作的一种抽象描述。

二、 Intent 六大基本属性:

1. Action

也就是Intent 要执行的动作,eg:ACTION_EDIT

也可以自定义动作。

2.Type

            显示指定Intent的数据类型

3. Data

             执行动作所要操作的数据

4. Category

             Intent要执行的附加信息。

如 LAUNCHER_CATEGORY 表示Intent 的接受者应该在Launcher中作为顶级应用出现

5. Component

指定Intent的的目标组件的类名称,通常根据其他属性的设置来寻找。

如果有指定,则不再查找。

6. Extras

附加信息。是其它所有附加信息的集合。使用extras可以为组件提供扩展信息。

比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。

三、 两种基本用法:

1.显示Intent (Explicit Intent)

在定义Intent时,就已经指定了接收者。

2.隐式Intent (Implicit Intent)

Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,有利于降低发送者和接收者之间的耦合

这时需要通过android解析得到接收者。解析机制如下:

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

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

  • 如果Intent指明了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;
  • 如果Intent没有提供type,系统将从data中得到数据类型。和action一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。
  • 如果Intent中的数据不是content: 类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者mailto:) 进行匹配。
  • 如果Intent指定了一个或多个category,这些类别必须全部出现在组建的类别列表中。(比如Intent中包含了两个类别:LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别)

抱歉!评论已关闭.