Android IPC基础概念介绍

好久没有学习安卓的进阶知识了,这次看了《安卓开发艺术探索》,对android的IPC机制有了一定的理解,也对安卓的内部原理有了一定的认识。
本文主要介绍一下IPC的一些基本概念:Serializable接口,Parcelable接口和Binder

Serializable接口:Serializable是java所提供的一个序列化接口,提供序列化和反序列化操作,使用Seriazable实现对象的序列化比较简单,直接在类中实现Serializable接口就行了.
一般需要在实现了Serializable的类中添加一个类的唯一标识:serialVersionUID
添加serialVersionUID的意义:如果不添加serualVersionUID的话,有可能不能被正常的反序列化,一般当序列化的时候系统会将标识的serialVersionUID一起写入文件中,当反序列化的时候,系统会将文件中的serialVersionUID和类中的serialVersionUID进行比较,如果相同则进行反序列化,不相同则反序列化失败.
如果不定义serialVersionUID系统会默认将对象构成的hash值保存到文件中,当该类的成员发生一些变化时,该类的hash值也会变化,所以当反序列化的时候,系统就会判定serialVersionUID不匹配而导致反序列化失败.

Parcelable接口:只要实现了这个接口,一个类的对象就可以实现序列化并可以通过Intent和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){
this.userId = userId;
this.userName= userName;
this.isMale = isMale;
}
public int describeContents(){
return 0;
}
public void writeToParcel(Parcel out,int flags){
out.writeInt(userId);
out.writeString(userName);
out.writeInt(isMale?0:1);
out.writeParcelable(book,0);
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){
public User createFromParcel(Parcel in){
return new User(in);
}
public User[] new Array(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());
}
}
从上面的代码可以看出Parcelable实现了序列化和反序列化的功能,其中序列化是通过writeToParcel方法实现的,内部是Parcel的write方法,反序列化是通过CREATOR实现的,内部是通过Parcel的一系列read是方法.
方法说明:
createFromParcel():从序列化后的对象中创建原始对象。
newArray():创建指定长度的原始对象数组。
User(Parcel in):从序列化后的对象中创建原始对象。
writeToParcel():将当前的对象写入序列化结构中。
describleContents():返回当前对象的内容描述,如果含有文件描述符,返回1,否则返回0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值