Android Serialzable和Parcelable的區(qū)別?Bunder傳遞對象為什么需要序列化?
1 Bunder傳遞對象為什么需要序列化?
因為bundle傳遞數(shù)據(jù)時只支持基本數(shù)據(jù)類型,所以在傳遞對象時需要序列化轉(zhuǎn)換成可存儲或可傳輸?shù)谋举|(zhì)狀態(tài)(字節(jié)流)。
序列化后的對象可以在網(wǎng)絡、IPC(比如啟動另一個進程的Activity、Service和Reciver)之間進行傳輸,也可以存儲到本地。
2 Serialzable和Parcelable的區(qū)別?
Serializable和Parcelable接口可以完成對象的序列化的過程,當我們需要通過Intent和Binder傳輸數(shù)據(jù)時就需要使用Parcelable或者Serializable,有時候我們還需要把對象持久化到存儲設備上或者通過網(wǎng)絡傳輸給其他客戶端,這個時候也需要使用Seriazable來完成對象的持久化.
2.1 基本區(qū)別
Serializable是屬于 Java 自帶的,表示一個對象可以轉(zhuǎn)換成可存儲或者可傳輸?shù)臓顟B(tài),序列化后的對象可以在網(wǎng)絡上進行傳輸,也可以存儲到本地。
Parcelable 是屬于 Android 專用。不過不同于Serializable,Parcelable實現(xiàn)的原理是將一個完整的對象進行分解。而分解后的每一部分都是Intent所支持的數(shù)據(jù)類型。
2.2 本質(zhì)的區(qū)別
Serializable的本質(zhì)是使用了反射,序列化的過程比較慢,這種機制在序列化的時候會創(chuàng)建很多臨時的對象,比引起頻繁的GC、
Parcelable方式的本質(zhì)是將一個完整的對象進行分解,而分解后的每一部分都是Intent所支持的類型,這樣就實現(xiàn)了傳遞對象的功能了。
2.3 應用場景
在 activity、service之間進行對象的傳遞,推薦使用Parcelable,因為Parcelable比Serializable性能高很多。因為Serializable在序列化的時候會產(chǎn)生大量的臨時變量, 從而引起頻繁的GC。
如果是持久化操作,推薦Serializable,雖然Serializable效率比較低,但是還是要選擇它,因為在外界有變化的情況下,Parcelable不能很好的保存數(shù)據(jù)的持續(xù)性。
————————————————
完畢