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