Intent 学习笔记(-)

来源:互联网 发布:深圳程序员工资水平 编辑:程序博客网 时间:2024/06/05 20:18

       

我们知道在android系统中三大核心组件——Activity、Service、BroadcastReceiver 都是依赖于Intent启动的。Intnet里面包含了完成的动作,处理的数据等信息。

 一、在Intent里基本有这样几类信息:

componentname 

处理intent 的组件的名字。他是可选的。如果设置了,intent对象会被传递给指定类的实例。如果没有设置,Android根据Intnet对象中的信息定位到合适的目标。

Action:表示Intent所要执行的动作。特别是广播中,在Receiver中根据IntentAction的不同,从而进行不同的逻辑处理。动作的定义在很大程度上决定了Intent数据结构中:dataextras字段的定义。有如,函数名决定了参数和返回值。所以,不要孤立的定义action,而是定义Intnet的整个协议。

Data:表示被作用数据的URI 和数据的MINE类型。不同的Action(动作)对应于不同的Data。。如ACTION_CALL对应于电话号码tel://URI、ACTION_VIEW对应于网络地址的URI。。

Category: 表示需要处理Intent的component组件附加信息。

Extras:表示Intent中所传递的附加信息的键值对

Flags:有各种各样的Flags,很多都是知道Android系统怎么样lauch一个activity,以及启动后怎么处理。

二、 Intent大致可以分为两类:

       ExplicitIntents(显示意图),通过设置component name字段直接指定需要传递这个意图的component组件。但是我们不是经常能够知道组件的名字的,特别是不同的应用程序。所以,这个Explicit Intents主要用于程序内部的消息传递。

    Implicit Intents(隐式意图),不指定明确的目标组件,这样Android系统就要通过一定的方案找到处理这个intent的最佳组件。它通过比较intent filter的内容,这些东西声明了组件component能力android系统判断这个能力是否匹配,然后分发Implicit Intent

    <IntentFilter>中一般描述了三个方面:actiondata(URI and data Type)category。如果一个component<Intent Filter>里面没有内容,则说明该component不匹配任何Intent,只有三个方面都匹配通过了,Android系统才会把这个Intent消息传递给这个component。当然,每个方面有很多条信息,只需要满足一条则表示该方面通过了。 

<intent-filter android:label="@string/resolve_edit">                <action android:name="android.intent.action.VIEW" />                <action android:name="android.intent.action.EDIT" />                <action android:name="com.android.notepad.action.EDIT_NOTE" />                <category android:name="android.intent.category.DEFAULT" />                <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />            </intent-filter>

参考资料:

http://blog.csdn.net/liuhe688/article/details/7162988

android开发文档

原创粉丝点击