1. Parcelable接口
Parcelable的实例可以被写入和恢复一个 Parcel
类。一个类实现Parcelable接口也必须有一个公开的静态的常态的字段CREATOR,这是实现 Parcelable.Creator
的对象。
实现Parcelable案例:
public class Student implements Parcelable {
private String name;// 你要序列化的数据
private int age;// 你要序列化的数据
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// get和set方法,略
// ...
<span style="color:#ff9966;">// 注意修饰符public static final都必须要有,名字CREATOR也是固定的,不能改成小写或其他名字</span>
public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
@Override
public Student createFromParcel(Parcel in) {
return new Student(in);
}
@Override
public Student[] newArray(int size) {
return new Student[size];
}
};
// 注意这个构造方法是私有的
private Student(Parcel in) {
<span style="color:#ff9966;">// 数据读取的顺序要和写入时保持一致</span>
name = in.readString();
age = in.readInt();
}
// 描叙内容,不用管
@Override
public int describeContents() {
return 0;
}
<span style="color:#ff9966;">// 将数据写入Parcel中,Parcel对象似于一个双向流,既可以写入又可以读取</span>
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(name);
out.writeInt(age);
}
}
Parcelable是一种类似于Serializable的序列化接口,效率比Serializable略高效,但不能使用Parcelable将数据存储在磁盘上,而只能序列化到内存中(只能代替DataOutputStream和DataInputStream),因为Parcelable不能很好的保证数据的持续性,所以Parcelable主要用于Intent数据传递,也可以用于进程间通信。