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