#前言#
Android开发中在不同的组件之间进行跳转通常通过Intent进行实现,这其中时常会携带一些额外数据。平时开发过程中,除了携带一些基本数据类型之外,还可以携带数据对象。常见的也是最常用的两种可携带对象形式,实现Serializable接口或实现Parcelable接口。
#Serializable和Parcelable的主要区别#
Serializable接口主要的作用就是保存对象的各个属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
#性能优劣和使用情景#
Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。多说一句,说到性能,想到了StringBuffer和StringBuild的区别,这也是面试中经常问到的一个问题。
#具体的编码实现和使用#
使用Serializable直接实现Serializable接口即可,程序会自动生成一个序列化ID,表示对当前对象进行序列化。如果是使用Parcelable,实现Parcelable接口后,还需要自己写一些方法的实现,具体来说就是:writeToParcel()、describeContents()、还有静态的CREATOR变量。