1、為什么要序列化
說直白點(diǎn)是為了對象的傳輸和存儲
傳輸:內(nèi)存?zhèn)鬏?Activity間傳輸數(shù)據(jù)、進(jìn)程通信)、網(wǎng)絡(luò)傳輸
存儲:可以保存對象的屬于到本地文件或著數(shù)庫庫
2、使用場景有所不同
SerializableIO用在存儲在文件或著數(shù)庫庫
Parcelable用在內(nèi)存中讀寫
3、效率和實(shí)現(xiàn)方式不同
Serializable使用了反射,序列化的過程較慢。這種機(jī)制會在序列化的時候創(chuàng)建許多的臨時對
象,容易觸發(fā)垃圾回收。
Parcelable根據(jù)google 工程師的說法,這些代碼將會運(yùn)行地特別快。原因之一就是我們已經(jīng)
清楚地知道了序列化的過程,而不需要使用反射來推斷。同時為了更快地進(jìn)行序列化,對象的
代碼也需要高度優(yōu)化。
速度測試
通過將一個對象放到一個bundle里面然后調(diào)用Bundle#writeToParcel(Parcel, int)方法來模
擬傳遞對象給一個activity的過程,然后再把這個對象取出來。
在一個循環(huán)里面運(yùn)行1000 次。
兩種方法分別運(yùn)行10次來減少內(nèi)存整理,cpu被其他應(yīng)用占用等情況的干擾。
參與測試的對象就是上面代碼中的SerializableDeveloper 和 ParcelableDeveloper。
在多種Android軟硬件環(huán)境上進(jìn)行測試
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倍。
總結(jié):
1、效率優(yōu)先選Parcelable是必須的 (Activity間數(shù)據(jù)的傳輸必選)?
2、持久化選Serializable