码迷,mamicode.com
首页 > 其他好文 > 详细

Intent:意图

时间:2016-08-08 01:11:46      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:android   intent   parcelable   intentfilter   

    Intent的主要作用:

1. 激活系统组件,例如激活Activity,激活Service……

2. 在组件之间传递数据,例如putExtra()与get???Extr()

这里补充一下,如果传输的内容是对象,则需要将对象序列化,即将对象实现Parcelable(序列化)接口,这样传输时才不会报错,下面简单插入一下实现Parcelable接口的步骤:


Parcelable接口是Android系统中用于确定数据在传递过程中如何序列化的接口。

实现Parcelable接口的步骤:

1. 自定义实体类,实现Parcelable接口,并添加抽象方法

2. describeContents()方法直接返回0即可

3. writeToParcel()方法中,通过参数Parcel dest的write???()系列方法将属性写入到Parcel容器中

4. 声明public static final Parcelable.Creator<T> CREATOR属性,并使用匿名内部类语法创建对象

5. 在实现Creator的2个抽象方法中,newArray()方法直接根据参数int size创建当前实体类的数据即可

6. 在实现Creator的2个抽象方法中,createFromParcel()方法,根据参数Parcel source的read???()方法从Parcel容器中获取传递过来的数据,并根据这些数据创建当前实体类的对象即可

注意:在调用Parcel对象的写入和读取方法时,必须保证顺序的一致,即第1次调用write???()写入的数据,必须是第1次调用read???()读出的数据。



Intent的核心属性:

1. ComponentName:组件名称,用于显式的指定被激活的组件

  直接或间接使用ComponentName属性的方法有:

   Intent的构造方法

   Intent对象的setClass()方法

   Intent对象的setClassName()方法

   ComponentName的构造方法

  推荐使用Intent的构造方法快速指定被激活的组件,不管是哪种方式,都是直接或间接的指定了Intent中的mComponent属性,用于确定被激活的组件

2. Action:动作,用于隐式的指定被激活的组件,且不要求该组件是当前应用程序的组件

  每个Intent对象中最多只有1个Action属性

  设置Action的方式:

   Intent的构造方法

   Intent对象的setAction(String)方法

3. Data:数据,用于指定激活组件时的数据,通常该属性与Action属性同时使用

  每个Intent对象中最多只有1个Data属性

  设置Data的方法:

   Intent对象的setData(Uri)方法

  Uri对象的创建方式:Uri.parse(String)

4. Category:分类,通常用于与IntentFilter进行匹配

  每个Intent对象中可以存在若干个Category属性

  添加Category的方式:

   Intent对象的addCategory(String)方法

5. Extras:附加数据,用于在组件之间传递用户自定义的数据

  Extras属性是Bundle类型的。Bundle的内部通过Map<String, Object>存储数据,但是,该Map对象并不对象提供访问权限,所以,只能通过Bundle的公有方法间接访问该Map对象存储数据,这些公共方法约定的Map的Value数据类型是相对有限的。

  Intent中的putExtra(String, ???)等方法,是间接的操作Bundle的。


IntentFilter:意图过滤器

------------------------------

IntentFilter的作用是对Intent进行过滤,使得其中一部分Intent可以放行,而另一部分将被拦截,亦可以理解为是判断Intent是否匹配某些条件。

IntentFilter对Intent的过滤,可以通过以下属性进行过滤:

1. Action

2. Category

通俗的原则:IntentFilter中的Action、Category,相关Intent对象中的Action、Category只能多,不能少,或者理解为在Intent对象中的Action、Category在同一个IntentFilter中都可以找到。

注意:如果Intent对象中已经显式的指定了ComponentName属性,则不会进行任何匹配,直接激活显式指定的组件。

注意:关于Intent与IntentFilter的匹配,还需要参考Type和Data属性。


本文出自 “11828641” 博客,请务必保留此出处http://11838641.blog.51cto.com/11828641/1835403

Intent:意图

标签:android   intent   parcelable   intentfilter   

原文地址:http://11838641.blog.51cto.com/11828641/1835403

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!