序列化Serializable與Parcelable原理與區(qū)別

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,113評論 25 709
  • 本文出自 “阿敏其人” 簡書博客,轉(zhuǎn)載或引用請注明出處。 一、android為什么要序列化?什么是序列化,怎么進(jìn)行...
    阿敏其人閱讀 44,909評論 20 100
  • Android跨進(jìn)程通信IPC整體內(nèi)容如下 1、Android跨進(jìn)程通信IPC之1——Linux基礎(chǔ)2、Andro...
    隔壁老李頭閱讀 12,317評論 6 38
  • 不知道為什么 把生活過成了自己最不情愿的樣子 不知道為什么 所有的想與做都偏離了原來的軌跡 不知道為什么 找不到人...
    郝懵三閱讀 594評論 0 1
  • 閑來無事我喜歡翻手機(jī)相冊,那里有很多我快樂的回憶…… 又到了一年復(fù)習(xí)季,圖書室里擠滿了各式各樣的物品,...
    觀茉閱讀 376評論 0 0

友情鏈接更多精彩內(nèi)容