package com.example.passobjdemo;
import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;
/*
* Android传递复杂类型,Activity之间传递数据是通过Intent实现的。
* Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。
* Parcelable是Android API特有的接口,效率比Serializable高,推荐用这种方法提高性能。
* Parcelable接口的作用:实现了Parcelable接口的实例可以将自身的状态信息写入Parcel,
* 也可以从Parcel中恢复其状态。 Parcel用来完成数据的序列化传递。
* */
public class ParcelableUtil implements Parcelable {
private ObjBean objBean;
public ObjBean getObjBean() {
return objBean;
}
public ParcelableUtil(ObjBean objBean) {
super();
this.objBean = objBean;
}
private ParcelableUtil(Parcel in) {
objBean = new ObjBean();
objBean.setId(in.readInt());
objBean.setName(in.readString());
objBean.setPrice(in.readDouble());
objBean.setBitmap((Bitmap) in.readParcelable(Bitmap.class.getClassLoader()));
}
@Override
public int describeContents() {
return 0;
}
/*
* 对象序列化在这里实现,
* 对每一个属性进行封装,写到流中
* 注意:在其他地方读或者设置值的时候,要跟这里写的顺序保持一致,否则读到的值可能为null
* */
@Override
public void writeToParcel(Parcel in, int flags) {
in.writeInt(objBean.getId());
in.writeString(objBean.getName());
in.writeDouble(objBean.getPrice());
in.writeParcelable(objBean.getBitmap(), PARCELABLE_WRITE_RETURN_VALUE);
}
/*
* API解释: Interface that must be implemented and provided as a public CREATOR field
* that generates instances of your Parcelable class from a Parcel.
*
* 实际上用来对象的反序列化
* */
public static final Parcelable.Creator<ParcelableUtil> CREATOR =
new Parcelable.Creator<ParcelableUtil>() {
@Override
public ParcelableUtil createFromParcel(Parcel source) {
return new ParcelableUtil(source);
}
@Override
public ParcelableUtil[] newArray(int size) {
return new ParcelableUtil[size];
}
};
}