您的位置:首页 > 移动开发 > Android开发

5.IPC 机制(三) IPC基础概念介绍 Parcelable接口

2016-11-10 16:56 507 查看
Parcelable也是一个接口,只要实现这个接口,一个类的对象就可以实现序列化并可以通过Intent和Binder传递。记住原则,写的顺序要和读的顺序一致.

实现序列化的方法

Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持的),一是实现Parcelable接口(是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信(IPC))。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。

Parcelable接口定义

public interface Parcelable
{
//内容描述接口,基本不用管public int describeContents();
//写入接口函数,打包public void writeToParcel(Parcel dest, int flags);
//读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入
//为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例    public interface Creator<T>
{
public T createFromParcel(Parcel source);
public T[] newArray(int size);
}
}


示例代码:

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();
}
}



1)Serializable的实现,只需要implements  Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。

2)Parcelabel的实现,不仅需要implements  Parcelabel,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息