一、Parceable和Serializable的區別
兩者最大的區別在于存儲媒介的不同,Serializable使用IO讀寫存儲在硬盤上,而Parcelable是直接在內存中讀寫,很明顯內存的讀寫速度通常大于IO讀寫,所以在Android中通常優先選擇Parcelable。
1)在使用內存的時候,Parcelable比Serializable性能高,所以推薦使用Parcelable。
2)Serializable在序列化的時候會產生大量的臨時變量,從而引起頻繁的GC(垃圾回收)。
3)Parcelable不能使用在要將數據存儲在磁盤上的情況,因為Parcelable不能很好的保證數據的持續性在外界有變化的情況下。盡管Serializable效率低點,但此時還是建議使用Serializable 。
Serializable可將數據持久化方便保存,所以在需要保存或網絡傳輸數據時選擇Serializable,因為android不同版本Parcelable可能不同,所以不推薦使用Parcelable進行數據持久化。
延伸閱讀:
二、Seralizable介紹
1.Serializable 是java的序列化技術,最簡單的使用方式為在需要序列化的class增加implements Serializable,并增加一個少數個序列化id: private static final long serialVersionUID = 1L; 默認方式較好直接設置為1L,因為java sdk會自動進行hash計算,并生成少數的UID值。手動設置serialVersionUID的好處是當前class如果改變了成員變量,比如增加或者刪除之后,這個UID是不改變的,那么反序列化就不會失敗;自動設置則在改變了成員變量之后就會重新計算獲得新的UID,從而導致失敗。不過,大多數情況下兩者都可以。
2.Seralizable相對Parcelable而言,好處就是非常簡單,只需對需要序列化的類class執行就可以,不需要手動去處理序列化和反序列化的過程,所以常常用于網絡請求數據處理,Activity之間傳遞值的使用。
3.Seralizable無法序列化靜態變量,使用transient修飾的對象也無法序列化。
4.當一個父類實現序列化,子類自動實現序列化,不需要再顯示實現Serializable接口。