Java中,我们经常在序列化对象的时候都会使用Serializable,而Android也有自己序列化的东西,那就是Parcelable。
它们两者直接有什么相同点和不同点呢?我们使用的时候又该如何选择?
相同点:
都是序列化对象,目标都是对象的持久化或者方便对象的传输。
不同点:
1、实现不一样,Serializable只需要实现这个接口并且给一个序列化的ID就可以,而Parcelable不需要序列化ID,需要实现接口中的两个方法和添加一个静态的成员CREATOR。
2、Serializable不需要自己去实现序列化的代码,而Parcelable需要自己去实现序列化和反序列化的代码,当然,你用as的话会自动给你生成。
序列化的时候如何选择?
性能方面面,Parcelable比Serializable要好,内存开销比较小,Serialiable序列化的是会产生大量的临时变量,会引起频繁的gc,所以,在Android传出对象的时候使用Parcelable比较好,而当需要对一个对象进行保存的时候,使用Serializable比较好,因为Android不同的版本可能Parceliable可能不同,而且Parclable不能很好的保证在外界有变化的时候保持数据的持续性(这就是为什么Parcelable中的describeContents方法的返回值是0),所以,需要持久化对象的时候需要用到Serializable。
有关于序列化的还可以参考:
Java—序列化—Serializable—Externalizable
2016-09-10-教师节