转自https://www.jianshu.com/p/df35baa91541
1.Parcelable的介绍
进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。简单来说就是将对象转换为可以传输的二进制流(二进制序列)(可存储或可传输的状态)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行传输数据 ,那反序列化就是从二进制流(序列)转化为对象的过程.
Parcelable是Android为我们提供的序列化的接口,使用Parcelable可以在进程间传递一个自定义的较为复杂的对象。比如,将一个对象如GroupInfo,从一个程序传递到launcher中,就需要使用到Parcelable。
2.Parcelable的使用
GroupInfo可以包含GroupName,GroupNumber,IsFastGroup;
要将GroupInfo在进程间传递,要对其实现序列化,在Android中实现Parcelable接口。在Parcelable接口中,我们需要的主要方法有writeToParcel,describeContents,Parcelable.Creator<?>。完成序列化,即将对象转换为二进制流的是writeToParcel。完成反序列化,即将二进制流转换为对象的是Parcelable.Creator<?>。
下面来看这么一段代码,GroupInfo类实现了Parcelable接口
public class GroupInfo implements Parcelable{
int mIsFastGroup = 0;
String mGroupName;
String mGroupNumber;
public GroupInfo(String name, String num, int fastGroup){
mGroupName = name;
mGroupNumber = num;
mIsFastGroup = fastGroup;
}
public GroupInfo(Parcel parcel){
mGroupName = parcel.readString();
mGroupNumber = parcel.readString();
mIsFastGroup = parcel.readInt();
}
//返回内容描述信息,一般返回0;
@Override
public int describeContents(){
return 0;
}
//序列化
@Override
public int writeToParcel(Parcel arg0, int arg1){
arg0.writeString(mGroupName );
arg0.writeString(mGroupNumber );
arg0.writeInt(mIsFastGroup );
}
//反序列化
public static final Creator<GroupInfo> CREATOR = new Creator<GroupInfo>(){
//创建指定长度的原始对象数组
@Override
public GroupInfo[] newArray(int size){
return new GroupInfo[size];
}
//从序列化对象中,获取原始的对象
@Override
public GroupInfo createFromParcel(Parcel parcel){
GroupInfo group = new GroupInfo(parcel);
return group;
}
}
}