Android中Serializable和Parcelable序列化对象详解

2019-12-10 19:00:46于海丽

  3). Parcelable是以Ibinder作为信息载体的.在内存上的开销比较小,因此在内存之间进行数据传递的时候,Android推荐使用Parcelable,既然是内存方面比价有优势,那么自然就要优先选择.

  4). 在读写数据的时候,Parcelable是在内存中直接进行读写,而Serializable是通过使用IO流的形式将数据读写入在硬盘上.

  但是:虽然Parcelable的性能要强于Serializable,但是仍然有特殊的情况需要使用Serializable,而不去使用Parcelable,因为Parcelable无法将数据进行持久化,因此在将数据保存在磁盘的时候,仍然需要使用后者,因为前者无法很好的将数据进行持久化.(原因是在不同的Android版本当中,Parcelable可能会不同,因此数据的持久化方面仍然是使用Serializable)

  速度测试:

  测试方法:

1)、通过将一个对象放到一个bundle里面然后调用Bundle#writeToParcel(Parcel, int)方法来模拟传递对象给一个activity的过程,然后再把这个对象取出来。

2)、在一个循环里面运行1000 次。

3)、两种方法分别运行10次来减少内存整理,cpu被其他应用占用等情况的干扰。

4)、参与测试的对象就是上面的相关代码

5)、在多种Android软硬件环境上进行测试

  • LG Nexus 4 – Android 4.2.2
  • Samsung Nexus 10 – Android 4.2.2
  • HTC Desire Z – Android 2.3.3 

     结果如图:

     Android中Serializable和Parcelable序列化对象详解

     性能差异:

    Nexus 10

    Serializable: 1.0004ms,  Parcelable: 0.0850ms – 提升10.16倍。