概念:
IPC(跨进程间通讯)主要从三个方面进行讲解:Serializable接口、Parcelable接口以及Binder三个方面进行将讲解。
1.Serializable接口
Serializable可以实现序列化和反序列化操作(不做详细介绍,可查相关资料),他是一个空接口,实现起来很简单。
如下代码:
/**
* @author :huangxianfeng on 2016/11/21.
* 实体的序列化
*/
public class User implements Serializable{
/**
* 序列化实体,只需要实现Serializable接口,然后去声明一个serialVersionUID,
* 即可实现实体的序列化,其实serialVersionUID是可有可无的,声明一样可以序列化
*
* serialVersionUID的含义是使序列化的数据,在被反序列化的时候要进行比对serialVersionUID的值是否一致。
*/
private static final long serialVersionUID =519067123721295773L;
private int id;
private String name;
private String sex;
}
2.Parcelable接口
Parcelable也是一个接口,只要实现这个接口,一个类的对象就可以实现序列化,并且可以在Intent和Binder来进行传递。
典型用法代码如下:
/**
* @author :huangxianfeng on 2016/11/21.
* Parcelable序列化一个典型的用法
*/
public class Animal implements Parcelable {
public int animalId;
public String animalName;
public boolean isMain;
public Book book;
public Animal(int animalId, String animalName, boolean isMain) {
this.animalId = animalId;
this.animalName = animalName;
this.isMain = isMain;
}
/**
* 返回当前对象的内容描述,如果含有文件描述返回1,否则返回0,几乎所有的情况都返回的是0.
* @return
*/
@Override
public int describeContents() {
return 0;
}
/**
* 将当前对象写入序列化结构中,其中flags中有两个值:0或1
* 1:表示当前对象需要作为返回值返回,不能立即释放资源,几乎所有的返回值都是0
* @param dest
* @param flags
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(animalId);
dest.writeString(animalName);
dest.writeInt(isMain ? 1 : 0);
dest.writeParcelable((Parcelable) book,0);
}
public static final Creator<Animal> CREATOR = new Creator<Animal>() {
/**
* 从序列化的对象中创建原始对象
* @param in
* @return
*/
@Override
public Animal createFromParcel(Parcel in) {
return new Animal(in);
}
/**
* 创建指定长度的原始对象数组
* @param size
* @return
*/
@Override
public Animal[] newArray(int size) {
return new Animal[size];
}
};
/**
* 从序列化的对象中创建原始对象
* @param in
*/
protected Animal(Parcel in) {
animalId = in.readInt();
animalName = in.readString();
isMain = in.readInt() ==1;
book = in.readParcelable(Thread.currentThread().getContextClassLoader());
}
}
学习笔记,仅供大家学习参考。