标签: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
标签:android intent parcelable intentfilter
原文地址:http://11838641.blog.51cto.com/11828641/1835403