Parcelable接口是Android提供的,一般用它的次数比较多,用来传递类的对象。
此接口实现序列化后可以通过Inten和Binder传递。
public class User implements Parcelable{
public int userId;
public String userName;
public boolean isMale;
public Book book;//这里是个对象
public User(int userId,String userName,boolean isMale){
//..省略
}
/**
* 功能描述
* @return
*/
public int describeContents() {
return 0;
}
/**
* 序列化
* @param out
* @param flages
*/
public void writeToParcel(Parcel out, int flages) {
out.writeInt(userId);
out.writeString(userName);
out.writeInt(isMale ? 1 : 0);//boolean值也是写int
out.writeParcelable(book, 0);//book对象
}
/**
* 反序列化
*/
public static final Parcelable.Creator<User> CREATOR =
new Parcelable.Creator<User>() {
public User createFromParcel(Parcel in) {
return new User(in);
}
public User[] newArray(int size) {
return new User[size];
}
};
private User(Parcel in) {
userId = in.readInt;
userName = in.readString();
isMale = (in.readInt() == 1);
book = in.readParcelable(Thread.currentThread().getContextClassLoader());
//book是另一个可序列化对象,所以反序列化需要传递当前线程的上下文类加载器,否则会报无法找到类的错误。
}
}
系统提供了许多实现了Parcelable接口的类,它们可以直接序列化(Intent,Bundle,Bitmap),List和Map也可以,前提是所有元素都可序列化。