注意:如果此处序列化类Person内部包含其他类(如:PersonInfo)的引用,如:
class Person implements Serializable {
PersonInf**o info;
}
那么所引用的类必须也可序列化,即实现Serializable接口。因为Person对象在序列化过程中,也会对成员变量序列化。
七、Parcelable接口 - Android
此处围绕 - Android中如何使用Parcel实现对象的传递 - 简单介绍一下原因。
首先要了解Android里面的Parcel容器。
Parcel是一个容器,用来存储可通过IBindler传送的消息(数据或对象引用)。
主要用于轻量级、高性能IPC进程间通信的消息容器。在Android里,一个“process”是一个标准Linux进程,一般而言一个进程无法接触到另一个进程的内存区。而通过Parcel,Android系统会将对象分解成可序列化与反序列化,从而实现进程间通信。
不过,Parcel同样可用于进程内通信,主要实现在应用程序的不同组件之间传递数据。例如,我们可以使用Intent封装Parcel对象在Activity之间传递。
简单来说,Parcel容器实现了进程内与进程间通信,而且还能实现远程调用。
组件间传递对象的具体方法:
让要传递的对象所属类实现 Parcelable 接口;
实现 describeContents 方法;
实现抽象方法 writeToParcel,用于获取对象的当前状态并写入一个Parcel容器中;
给该目标类添加一个静态域 CREATOR ,它是一个实现了Parcelable.Creator接口的对象;
添加一个参数为一个Parcel对象的构造函数,CREATOR会调用这个构造函数来重新改造我们的对象。
问题:
为什么已经有了Java的Serializable接口还要创建一个Parcelable接口?
性能
虽然Parcelable使用起来更复杂一点,但是它的性能更好。
Parcelable的限制:
当使用Parcelable来传递图片Bitmap时不太理想,虽然Bitmap也实现了Parcelable接口。比较优的方法是传递
Parcelable不能用来当做常规的序列化存储,因为Android系统版本不同,Parcelable的具体实现方法也不完全一样,可能导致无法读取Parcel数据。










