Android序列化接口Parcelable與Serializable接口對(duì)比
Parcelable
優(yōu)點(diǎn):
- google專門為安卓寫的序列化接口
- 性能好,內(nèi)存開銷小,效率高,寫起來復(fù)雜
缺點(diǎn):
- 各個(gè)機(jī)型可能有差異,Parcelable使用會(huì)產(chǎn)生差異
- 通訊組件之間(AIDL ,INTENT)的數(shù)據(jù)傳遞,可以使用Parcelable
- 寫入存儲(chǔ)設(shè)備推薦使用Serializable
public class MyParcelable implements Parcelable { * private int mData;//參數(shù) * public int describeContents() {//類描述,一般不管他 * return 0; * } * public void writeToParcel(Parcel out, int flags) {//序列化 :out寫入?yún)?shù),要注明參數(shù)類型 flag一般默認(rèn)是0,1代表對(duì)象需要返回,不回收 * out.writeInt(mData); * } * public static final Parcelable.Creator<MyParcelable> CREATOR//反序列化操作 * = new Parcelable.Creator<MyParcelable>() { * public MyParcelable createFromParcel(Parcel in) { * return new MyParcelable(in); * } * public MyParcelable[] newArray(int size) { * return new MyParcelable[size]; * } * }; * private MyParcelable(Parcel in) { * mData = in.readInt(); * } * }
google官方也是很貼心呀,直接把怎么用放在源碼的注釋里了
Serializable
優(yōu)點(diǎn):
- java自帶的序列化接口
- Serializable是一個(gè)空接口,使用簡(jiǎn)單,是一個(gè)標(biāo)識(shí),會(huì)給類一個(gè)序列化UID
缺點(diǎn):
- 因?yàn)槭褂玫氖欠瓷洌褂眯阅懿?,?nèi)存開銷大
package java.io; // Android-added: Notes about serialVersionUID, using serialization judiciously, JSON. public interface Serializable { }
Serializable 是一個(gè)空接口,用來標(biāo)識(shí)當(dāng)前類可以被 ObjectOutputStream序列化,以及被ObjectInputStream反序列化
Parcelable與Serializable的性能比較
- 在內(nèi)存的使用中,Parcelable在性能方面要強(qiáng)于Serializable
- Serializable在序列化操作的時(shí)候會(huì)產(chǎn)生大量的臨時(shí)變量,(原因是使用了反射機(jī)制)從而導(dǎo)致GC的頻繁調(diào)用,因此在性能上會(huì)稍微遜色
- Parcelable是以Ibinder作為信息載體的,在內(nèi)存上的開銷比較小,因此在內(nèi)存之間進(jìn)行數(shù)據(jù)傳遞的時(shí)候,Android推薦使用Parcelable
- 在讀寫數(shù)據(jù)的時(shí)候,Parcelable是在內(nèi)存中直接進(jìn)行讀寫,而Serializable是通過使用IO流的形式將數(shù)據(jù)讀寫入在硬盤上
- 雖然Parcelable的性能要強(qiáng)于Serializable,但是仍然有特殊的情況需要使用Serializable,而不去使用Parcelable,因?yàn)镻arcelable無法將數(shù)據(jù)進(jìn)行持久化,因此在將數(shù)據(jù)保存在磁盤的時(shí)候,仍然需要使用后者,因?yàn)榍罢邿o法很好的將數(shù)據(jù)進(jìn)行持久化 (原因是在不同的Android版本當(dāng)中,Parcelable可能會(huì)不同,因此數(shù)據(jù)的持久化方面仍然是使用Serializable)
總結(jié):
- Java應(yīng)用程序中有Serializable來實(shí)現(xiàn)序列化操作
- Android中有Parcelable來實(shí)現(xiàn)序列化操作
- 在Android中除了對(duì)數(shù)據(jù)持久化的時(shí)候需要使用到Serializable來實(shí)現(xiàn)序列化操作,其他的時(shí)候我們?nèi)匀恍枰褂肞arcelable來實(shí)現(xiàn)序列化操作
- 在Android中效率并不是最重要的,而是內(nèi)存, 通過比較Parcelable在效率和內(nèi)存上強(qiáng)于Serializable
個(gè)人小建議:
盡管Parcelable實(shí)現(xiàn)起來比較復(fù)雜,但是如果我們想要成為一名優(yōu)秀的Android軟件工程師,那么我們就需要勤快一些去實(shí)現(xiàn)Parcelable,而不是偷懶與實(shí)現(xiàn)Serializable,當(dāng)然實(shí)現(xiàn)Serializable也可以
到此這篇關(guān)于Android序列化接口Parcelable與Serializable接口對(duì)比的文章就介紹到這了,更多相關(guān)Android Parcelable與Serializable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android序列化實(shí)現(xiàn)接口Serializable與Parcelable詳解
- Android序列化之Parcelable和Serializable的使用詳解
- Android Parcelable與Serializable詳解及區(qū)別
- Android Intent傳遞對(duì)象的兩種方法(Serializable,Parcelable)詳細(xì)介紹
- Android中Serializable和Parcelable序列化對(duì)象詳解
- Android中Intent傳遞對(duì)象的兩種方法Serializable,Parcelable
- Android中使用Intent在Activity之間傳遞對(duì)象(使用Serializable或者Parcelable)的方法
相關(guān)文章
Android Filterable實(shí)現(xiàn)Recyclerview篩選功能的示例代碼
這篇文章主要介紹了Android Filterable實(shí)現(xiàn)Recyclerview篩選功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Android小部件Widget開發(fā)過程中的坑和問題小結(jié)
這篇文章主要介紹了Android小部件Widget開發(fā)過程中的坑和問題小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09零基礎(chǔ)學(xué)習(xí)教程之Linux下搭建android開發(fā)環(huán)境
這篇文章主要介紹了Linux下搭建android開發(fā)環(huán)境,特別適合零基礎(chǔ)的同學(xué)學(xué)習(xí),想要在Linux及ubuntu11.10下配置android4.0.3開發(fā)環(huán)境的朋友可以參考一下2015-12-12Android自定義滑動(dòng)驗(yàn)證條的示例代碼
本篇文章主要介紹了Android自定義滑動(dòng)驗(yàn)證條的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08Android實(shí)現(xiàn)IP地址輸入框的方法示例代碼
輸入框是我們?nèi)粘i_發(fā)中經(jīng)常遇到的一個(gè)控件,如果更好的控制輸入框是對(duì)用戶體驗(yàn)很重要的一步,所以下面這篇文章主要給大家介紹了關(guān)于Android如何實(shí)現(xiàn)IP輸入框的相關(guān)資料,需要的朋友可以參考下。2017-10-10Android開發(fā)之React Navigation 導(dǎo)航欄樣式調(diào)整+底部角標(biāo)消息提示
這篇文章主要介紹了React Navigation 導(dǎo)航欄樣式調(diào)整+底部角標(biāo)消息提示的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05