1、为什么要序列化
说直白点是为了对象的传输和存储
传输:内存传输(Activity间传输数据、进程通信)、网络传输
存储:可以保存对象的属于到本地文件或着数库库
2、使用场景有所不同
SerializableIO用在存储在文件或着数库库
Parcelable用在内存中读写
3、效率和实现方式不同
Serializable使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对
象,容易触发垃圾回收。
Parcelable根据google 工程师的说法,这些代码将会运行地特别快。原因之一就是我们已经
清楚地知道了序列化的过程,而不需要使用反射来推断。同时为了更快地进行序列化,对象的
代码也需要高度优化。
速度测试
通过将一个对象放到一个bundle里面然后调用Bundle#writeToParcel(Parcel, int)方法来模
拟传递对象给一个activity的过程,然后再把这个对象取出来。
在一个循环里面运行1000 次。
两种方法分别运行10次来减少内存整理,cpu被其他应用占用等情况的干扰。
参与测试的对象就是上面代码中的SerializableDeveloper 和 ParcelableDeveloper。
在多种Android软硬件环境上进行测试
LG Nexus 4 – Android 4.2.2
Samsung Nexus 10 – Android 4.2.2
HTC Desire Z – Android 2.3.3
parcelable-vs-serializable
Nexus 10
Serializable: 1.0004ms, Parcelable: 0.0850ms – 提升10.16倍。
Nexus 4
Serializable: 1.8539ms – Parcelable: 0.1824ms – 提升11.80倍。
Desire Z
Serializable: 5.1224ms – Parcelable: 0.2938ms – 提升17.36倍。
总结:
1、效率优先选Parcelable是必须的 (Activity间数据的传输必选)
2、持久化选Serializable