1.Intent传递数据时,可以传递哪些类型数据?
Intent可以传递的数据类型非常的丰富,Java的基本数据类型和String以及他们的数组形式都可以,除此之外还可以传递实现了Serializable和Parcelable接口的对象。
2.Serializable和Parcelable的区别
在使用内存的时候,parcelable类比Serializable性能高,所以推荐使用Parcelable类。
1).Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
2).parcelable不能使用在要将数据存储在磁盘上的情况。尽管serializable效率低点,但在这种情况下,还是建议你用serializable.
实现:
1).serializable的实现,只需要继承serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。
2).parcelabel的实现,需要在类中添加一个静态成员变量creator,这个变量需要继承parcelable.creator接口。
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags)
{ out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in)
{ mData = in.readInt();
} }
3.分析一下Intent和IntentFilter
Android 中通过Intent对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封email,其中不仅应该包含收件地址,还可以包含集体内容,对于一个intent对象,消息“目的地”是必须的,而内容则是可选项。通过 Intent可以实现各种系统组件的调用与激活。 IntentFilter:可以理解为邮局或者是一个信笺的分拣系统:
这个分拣系统通过3个参数来识别:
Action:动作 view
Data:数据uri
Category:而外的附加信息
Action 匹配。 Action 是一个用户定义的字符串,用于描述一个android应用程序组件,一个IntentFilter可以包含多个Action.在AndroidManifest.xml的Activity定义时可以在其 节点指定一个Action列表用于表示Activity所能接受的“动作”,例如:如果我们在启动一个activity时使用这样的intent对象:
在manifest中添加 ……
或者动态添加:
Intent intent =new Intent(); intent.setAction("cn.it.action");
那么所有的Action列表中包含了“cn.it.action”的Activity都将会匹配成功。
Android预定义了一系列的Action分别表示特定的系统动作。这些Action通过常量的方式定义在android.content.Intent中,以 “ACTION_”开头。我们可以在android提供的文档中找到它们的详细说明。
URI数据匹配
一个Intent可以通过URI携带外部数据给目标组件。在 节点中,通过节点匹配外部数据。
mimeType 属性指定携带外部数据的数据类型,scheme指定协议,host,port,path指定数据的位置、端口、和路径。如下:
<data android:mimetype="mimeType" android:scheme="scheme"
android:host="host" android:port="port" android:path="path" />
电话的uri tel : 12345 网站的:www.baidu.com 自己定义的 uri itcast://cn.it.person/10 如果在Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时,URI数据匹配才会成功。
Category 类别匹配
节点中可以为组件定义一个category类别列表,当Intent中包含这个列表的所有项目时Category类别匹配才会成功。
4.intent的意义
保证了组件之间的通信,在组件之间传递了数据。
各位小伙伴对我感兴趣的可以关注我的公众号:「growth_zh」,我在哪里等你哟。