天天看点

Android Parcelable vs Serializable

序列化

在Android中。对象在实现序列化之前是无法直接作为Intent參数在Activity之间传递的。

Android中对象序列化能够通过实现Serializable接口或者实现Parcelable接口。

接下来,我会介绍一下实现这两个接口的方法以及怎样在这两者之间进行选择。

Serializable

Serializable是一个标记接口,意味着它没有须要实现的方法。

由于对象再实现Serializable接口的时候,仅仅须要简单的implements就可以。

演示样例代码例如以下:

在Activity-1中传递PersonSerializable的代码例如以下:

在activity-2中接收PersonSerializable对象:

Parcelable

实现Parcelable接口主要须要例如以下几个步骤:

实现describeContents方法。

内容接口描写叙述,默认返回0就可以。

实现writeToParcel方法。传递数据到Parcel容器中。

创建一个Parcelable.Creator接口的实例,用于读取Parcel容器中的数据。

<code></code>

<code>方法是供外部类反序列化本类数组使用。 return new PersonParcelable[size]; } }; }</code>

在activity-1中传递PersonParcelable对象:

在activity-2中接收PersonParcelable对象:

差别

基本的差别例如以下:

Serializable实现简单,不须要不论什么额外的序列化操作。

而Parcelable实现较为复杂,有特定的接口和对象句柄须要实现。

Serializable在序列化的时候会产生大量的暂时变量。从而引起频繁的GC,而相比之下Parcelable的性能更高(号称10倍优于Serializable)。所以当在使用内存时(如:序列化对象在网络中传递对象或序列化在进程间传递对象),更推荐使用Parcelable接口。

Parcelable有个明显的缺点:不能使用在要将数据存储在磁盘上的情况(如:永久性保存对象,保存对象的字节序列到本地文件里)。由于Parcel本质上为了更好的实现对象在IPC间传递。并非一个通用的序列化机制,当改变不论什么Parcel中数据的底层实现都可能导致之前的数据不可读取。所以此时还是建议使用Serializable 。