天天看點

Serialzable和Parcelable的差別?Bunder傳遞對象為什麼需要序列化?

1 Bunder傳遞對象為什麼需要序列化?

因為bundle傳遞資料時隻支援基本資料類型,是以在傳遞對象時需要序列化轉換成可存儲或可傳輸的本質狀态(位元組流)。

序列化後的對象可以在網絡、IPC(比如啟動另一個程序的Activity、Service和Reciver)之間進行傳輸,也可以存儲到本地。

2 Serialzable和Parcelable的差別?

2.1 基本差別
  • Serializable是屬于 Java 自帶的,表示一個對象可以轉換成可存儲或者可傳輸的狀态,序列化後的對象可以在網絡上進行傳輸,也可以存儲到本地。
  • Parcelable 是屬于 Android 專用。不過不同于Serializable,Parcelable實作的原理是将一個完整的對象進行分解。而分解後的每一部分都是Intent所支援的資料類型。
2.2 本質的差別
  • Serializable的本質是使用了反射,序列化的過程比較慢,這種機制在序列化的時候會建立很多臨時的對象,比引起頻繁的GC、
  • Parcelable方式的本質是将一個完整的對象進行分解,而分解後的每一部分都是Intent所支援的類型,這樣就實作了傳遞對象的功能了。
2.3 應用場景
  • 在 activity、service之間進行對象的傳遞,推薦使用Parcelable,因為Parcelable比Serializable性能高很多。因為Serializable在序列化的時候會産生大量的臨時變量, 進而引起頻繁的GC。
  • 如果是持久化操作,推薦Serializable,雖然Serializable效率比較低,但是還是要選擇它,因為在外界有變化的情況下,Parcelable不能很好的儲存資料的持續性。