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