Android Parcelable and Serializable

1.Android中實(shí)現(xiàn)序列化有兩個(gè)選擇:
一是實(shí)現(xiàn)Serializable接口(是JavaSE本身支持的),另外一種是實(shí)現(xiàn)Parcelable接口(效率比Serializable高,是Android特有的,用于Intent傳遞數(shù)據(jù),也可用于進(jìn)程間通信)。

2.那么為什么需要序列化呀?
a)Serializable的作用是為了保存對(duì)象的屬性到本地文件、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)流、rmi以方便數(shù)據(jù)傳輸,當(dāng)然這種傳輸可以是程序內(nèi)的也可以是兩個(gè)程序間的.例如Intent需要傳遞一個(gè)對(duì)象,就用Bundle .putSerializable(Key,Object)。前提是你這個(gè)對(duì)象implement了Serailizable。
b)Android的Parcelable的設(shè)計(jì)初衷是因?yàn)镾erializable效率過慢,為了在程序內(nèi)不同組件間以及不同Android程序間(AIDL)高效的傳輸數(shù)據(jù)而設(shè)計(jì),這些數(shù)據(jù)僅在內(nèi)存中存在,Parcelable是通過IBinder通信的消息的載體。例如Intent需要傳遞一個(gè)對(duì)象,就用Bundle .putParcelable(Key,Object)。前提是你這個(gè)對(duì)象implement了Parcelable。

3.兩者對(duì)比:
1)在使用內(nèi)存的時(shí)候,Parcelable比Serializable性能高,所以推薦使用Parcelable。
2)Serializable在序列化的時(shí)候會(huì)產(chǎn)生大量的臨時(shí)變量,從而引起頻繁的GC。
3)Parcelable不能使用在要將數(shù)據(jù)存儲(chǔ)在磁盤上或網(wǎng)絡(luò)傳輸數(shù)據(jù)的情況,因?yàn)镻arcelable不能很好的保證數(shù)據(jù)的持續(xù)性在外界有變化的情況下。因?yàn)閍ndroid不同版本Parcelable可能不同,所以不推薦使用Parcelable進(jìn)行數(shù)據(jù)持久化盡管Serializable效率低點(diǎn),但此時(shí)還是建議使用Serializable 。
4.代碼實(shí)現(xiàn)
實(shí)現(xiàn)Serializable接口非常簡(jiǎn)單,只需要implements Serializable就可以了,有些變量如果不需要序列化的話就加上transient聲明。

Paste_Image.png

實(shí)現(xiàn)Parcelable接口略微有趣一些:
先看看Parcelable接口定義:

Paste_Image.png

再介紹一下Parcel吧:

Paste_Image.png

意思大概是Parcel是一個(gè)在序列化過程中的容器,可以write進(jìn)去,然后read出來,看不懂的妹子可以打電話或者微信視頻我。
實(shí)現(xiàn)Parcelable步驟:
1.在WriteToParcel方法中寫入自己需要的變量

Paste_Image.png

2.創(chuàng)建私有的構(gòu)造方法,按順序,按順序,按順序,把變量讀出來

Paste_Image.png

實(shí)例化靜態(tài)內(nèi)部對(duì)象CREATOR實(shí)現(xiàn)接口Parcelable.Creator
注:其中public static final一個(gè)都不能少,內(nèi)部對(duì)象CREATOR的名稱也不能改變,必須全部大寫。需重寫本接口中的兩個(gè)方法:createFromParcel(Parcel in) 實(shí)現(xiàn)從Parcel容器中讀取傳遞數(shù)據(jù)值,封裝成Parcelable對(duì)象返回邏輯層,newArray(int size) 創(chuàng)建一個(gè)類型為T,長(zhǎng)度為size的數(shù)組,僅一句話即可(return new T[size]),供外部類反序列化本類數(shù)組使用。

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容