序列化
在Android中。對象在實作序列化之前是無法直接作為Intent參數在Activity之間傳遞的。
Android中對象序列化能夠通過實作Serializable接口或者實作Parcelable接口。
接下來,我會介紹一下實作這兩個接口的方法以及怎樣在這兩者之間進行選擇。
Serializable
Serializable是一個标記接口,意味着它沒有須要實作的方法。
由于對象再實作Serializable接口的時候,僅僅須要簡單的implements就可以。
示範樣例代碼例如以下:
在Activity-1中傳遞PersonSerializable的代碼例如以下:
在activity-2中接收PersonSerializable對象:
Parcelable
實作Parcelable接口主要須要例如以下幾個步驟:
實作describeContents方法。
内容接口描寫叙述,預設傳回0就可以。
實作writeToParcel方法。傳遞資料到Parcel容器中。
建立一個Parcelable.Creator接口的執行個體,用于讀取Parcel容器中的資料。
<code></code>
<code>方法是供外部類反序列化本類數組使用。 return new PersonParcelable[size]; } }; }</code>
在activity-1中傳遞PersonParcelable對象:
在activity-2中接收PersonParcelable對象:
差别
基本的差别例如以下:
Serializable實作簡單,不須要不論什麼額外的序列化操作。
而Parcelable實作較為複雜,有特定的接口和對象句柄須要實作。
Serializable在序列化的時候會産生大量的暫時變量。進而引起頻繁的GC,而相比之下Parcelable的性能更高(号稱10倍優于Serializable)。是以當在使用記憶體時(如:序列化對象在網絡中傳遞對象或序列化在程序間傳遞對象),更推薦使用Parcelable接口。
Parcelable有個明顯的缺點:不能使用在要将資料存儲在磁盤上的情況(如:永久性儲存對象,儲存對象的位元組序列到本地檔案裡)。由于Parcel本質上為了更好的實作對象在IPC間傳遞。并非一個通用的序列化機制,當改變不論什麼Parcel中資料的底層實作都可能導緻之前的資料不可讀取。是以此時還是建議使用Serializable 。